public static Task <T> GetTask <T>(this RemoteTask <T> remoteTask) { AsyncManualResetEvent taskCompletedEvent = new AsyncManualResetEvent(); T ret = default; void Signal(T result, Exception ex) { if (ex != null) { LogTo.Warning(ex, "Exception caught"); throw ex; } ret = result; taskCompletedEvent.Set(); } async Task <T> WaitForSignal() { await taskCompletedEvent.WaitAsync(); return(ret); } remoteTask.SetCallback(new ActionProxy <T, Exception>(Signal)); return(Task.Run(WaitForSignal)); }
public static Task GetTask(this RemoteTask remoteTask) { AsyncManualResetEvent taskCompletedEvent = new AsyncManualResetEvent(); void Signal(Exception ex) { if (ex != null) { throw ex; } taskCompletedEvent.Set(); } async Task WaitForSignal() { await taskCompletedEvent.WaitAsync(); } remoteTask.SetCallback(new ActionProxy <Exception>(Signal)); return(Task.Run(WaitForSignal)); }