如果完成源被取消,我会在结果变量中收到什么?
async void SomeMethod()
{
.....
Run();
var result = await GetResult();
.....
}
Task<SomeResult> GetResult()
{
return myCompletionSource.Task;
}
TaskCompletionSource myCompletionSource;
void Run()
{
myCompletionSource= new TaskCompletionSource();
TriggerSomeLongLastingLogicWhichWillCallCallBackBelow();
}
void SomeCallback()
{
if (someCondition)
{
myCompletionSource.SetResult(<someResult>);
}
else
{
myCompletionSource.SetCancelled();
}
}
我不太确定这种方法是否正确。
- 换句话说,依赖任务状态而不是为带有状态变量的“someresult”创建包装器是一种好习惯吗?
- 如何处理取消的任务?我不喜欢回调,也不喜欢使用 ContinueWith 的解决方案,我可以在其中分析任务状态。