我手头有一个可能是Task
,ValueTask
或ValueTask<T>
的对象(最好我可以支持任何类型的等待对象)。无论实际的类型如何,我都希望安排一个继续。最佳地,继续可以确定原始的等待项是否已成功完成,出现故障或已被取消。
该怎么做?
我的第一次尝试是:
var getAwaiterMethod = invocation.ReturnValue.GetType().GetMethod(nameof(Task.GetAwaiter));
var awaiter = (INotifyCompletion) getAwaiterMethod.Invoke(myAwaitableObject, new object[0]);
awaiter.OnCompleted(() => myContinuation);
但是,在这种情况下,继续无法判断等待对象是否已成功完成,出现故障或已被取消。
还有更好的方法吗?
您可以await
dynamic
类型:
[不确定this video是否能为您提供帮助,但这极大地促进了我对使用Task的理解。具体来说,他介绍了“任务继续选项”中的ContinueWith操作,它将为您提供所需的内容。从大约48:00开始,然后返回并根据需要重新启动。