private void RegisterMarshaller(TaskMarshaller marshaller) { Task.ContinueWith( t => { if (t.IsFaulted) { marshaller.SetException(t.Exception.InnerExceptions.ToArray()); } else if (t.IsCanceled) { marshaller.SetCanceled(); } else if (t.IsCompleted) { if (ResultType != null) { marshaller.SetResult(AdapterTools.Marshal(((dynamic)t).Result)); } else { marshaller.SetResult(null); } } } ); }
public static Task CreateTask(TaskAdapter adapter) { Type resType = adapter.ResultType; TaskMarshaller marshal; if (resType != null) { marshal = (TaskMarshaller)Activator.CreateInstance(TaskMarshaller.Type.MakeGenericType(resType)); } else { marshal = new TaskMarshaller <NoResult>(); } adapter.RegisterMarshaller(marshal); return(marshal.Task); }