C# 将回调方法转换为任务
在C#中,是否有转换的方法:C# 将回调方法转换为任务,c#,C#,在C#中,是否有转换的方法: Foo(Action<T> onComplete); Foo(完成操作); 进入: Task FooTask(); Foo函数是外部库的一部分,无法修改。看起来像是针对以下对象的作业: SetResult完成返回的任务,并将其Result设置为传递到Foo的回调中的值。看起来像是用于: SetResult完成返回的任务,并将它的Result设置为传递给Foo的回调的值。我不确定当T被传递到操作而不是从中返回时,它是否会起作用(这将是Func或Fun
Foo(Action<T> onComplete);
Foo(完成操作);
进入:
Task FooTask();
Foo函数是外部库的一部分,无法修改。看起来像是针对以下对象的作业:
SetResult
完成返回的任务
,并将其Result
设置为传递到Foo
的回调中的值。看起来像是用于:
SetResult
完成返回的任务
,并将它的Result
设置为传递给Foo
的回调的值。我不确定当T
被传递到操作
而不是从中返回时,它是否会起作用(这将是Func
或Func
)?@MartinCostello是的,T
将被传递到SetResult
,该结果可以转换为Action
。从NET5开始,可以使用非通用TaskCompletionSource
,这可能对非通用操作
@JL0PD-Nice有用,这比必须先使用TaskCompletionSource
然后再使用SetResult(null)
要好。我不确定当T
被传递到操作中,而不是从它返回(这将是Func
或Func
)时,这是否会起作用?@MartinCostello是的,而T
将被传递到SetResult
,该结果可以转换为Action
。从NET5开始,可以使用非通用TaskCompletionSource
,这可能对非通用Action
@JL0PD-Nice有用,这比必须先使用TaskCompletionSource
然后再使用SetResult(null)
要好。
Task<T> FooTask();
Task<T> FooAsync<T>()
{
var tcs = new TaskCompletionSource<T>();
Foo(tcs.SetResult);
return tcs.Task;
}
var result = await FooAsync<YourType>();