如何为Task而不是Task<TResult>创建TaskCompletionSource
发布于 2013-07-06 04:00:06
没有非通用版本。但是,Task是从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
}这里的主要优点是类型是尽可能小的(最少的浪费),并且类型不会暗示结果中包含“值”(如果使用者确实使用反射等)。
https://stackoverflow.com/questions/17496083
复制相似问题