如何TaskCompletionSource
为 aTask
而不是 a 创建一个Task<TResult>
?
问问题
364 次
1 回答
4
没有非通用版本。但是,Task<T>
派生自Task
,因此您可以只使用TaskCompletionSource<bool>
和返回任务。
Task SomeMethodAsync()
{
var tcs = new TaskCompletionSource<bool>();
// Implement method as needed
return tcs.Task; // Return the Task<bool> as a Task
}
请注意,我使用bool
它只是因为它是一个小值类型,结果将被“丢弃”。这里的另一个选择是创建自己的自定义类型并返回它,即:
private struct EmptyType {}
Task SomeMethodAsync()
{
var tcs = new TaskCompletionSource<EmptyType>();
// Implement method as needed
// Use tcs.SetResult(default(EmptyType)) or similar
return tcs.Task; // Return the Task<bool> as a Task
}
这里的主要优点是类型尽可能小(浪费最少),并且类型不暗示结果中包含“值”(如果消费者确实使用反射等)。
于 2013-07-05T20:00:05.793 回答