Exemplo n.º 1
0
        public static Task <T> Marshal <T>(this AppDomain appDomain, Func <Task <T> > function)
        {
            var m = new MarshalableCompletionSource <T>();
            var t = typeof(RemoteWorker <T>);
            var w = (RemoteWorker <T>)appDomain.CreateInstanceAndUnwrap(t.Assembly.FullName, t.FullName ?? throw new InvalidOperationException());

            w.Run(function, m);
            return(m.Task);
        }
Exemplo n.º 2
0
 public void Run <T1>(Func <T1, Task <T> > function, T1 arg1, MarshalableCompletionSource <T> marshaler)
 {
     function(arg1).ContinueWith(t => {
         if (t.IsFaulted)
         {
             marshaler.SetException(t.Exception?.InnerExceptions.ToArray());
         }
         else if (t.IsCanceled)
         {
             marshaler.SetCanceled();
         }
         else
         {
             marshaler.SetResult(t.Result);
         }
     });
 }