예제 #1
0
        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));
        }
예제 #2
0
        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));
        }