У меня под рукой есть объект, который может быть 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);
Тем не менее, в этом случае продолжение не может сказать, успешно ли завершилось ожидаемое, отменено или отменено.
Есть ли лучший способ?