完了ソースがキャンセルされた場合、結果変数には何が返されますか?
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 を使用したソリューションが好きではありません。