将回调方法转换为Task

  • 本文关键字:Task 转换 方法 回调 c#
  • 更新时间 :
  • 英文 :


在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回调的值。

相关内容

最新更新