在c#中,是否有一种方法来转换:
Foo(Action<T> onComplete);
为:
Task<T> FooTask();
Foo函数是外部库的一部分,不能修改
看起来像是TaskCompletionSource
的工作:
Task<T> FooAsync<T>()
{
var tcs = new TaskCompletionSource<T>();
Foo(tcs.SetResult);
return tcs.Task;
}
这允许基于回调的API作为基于Task
的API使用。
你可以这样调用:
var result = await FooAsync<YourType>();
SetResult
完成返回的Task
,并将其Result
设置为传递给Foo
回调的值。