私はこれらのWindows 8 WinRTタスクで遊んでいますが、私は以下の方法でタスクを取り消そうとしています。 CancelNotificationメソッドが呼び出されると、タスクはキャンセルされたとみなされますが、バックグラウンドでタスクが実行を継続すると、タスクの完了後、タスクのステータスは常に完了し、決してキャンセルされません。キャンセルされたときにタスクを完全に停止する方法はありますか?待っているタスクをキャンセルするには?
private async void TryTask()
{
CancellationTokenSource source = new CancellationTokenSource();
source.Token.Register(CancelNotification);
source.CancelAfter(TimeSpan.FromSeconds(1));
var task = Task<int>.Factory.StartNew(() => slowFunc(1, 2), source.Token);
await task;
if (task.IsCompleted)
{
MessageDialog md = new MessageDialog(task.Result.ToString());
await md.ShowAsync();
}
else
{
MessageDialog md = new MessageDialog("Uncompleted");
await md.ShowAsync();
}
}
private int slowFunc(int a, int b)
{
string someString = string.Empty;
for (int i = 0; i < 200000; i++)
{
someString += "a";
}
return a + b;
}
private void CancelNotification()
{
}
ワウの素晴らしい情報!それが完全に機能したので、非同期メソッドで例外を処理する方法を理解する必要があります。ありがとう!私はあなたが提案したものを読むでしょう。 – Carlo
取り扱いが容易でした。もう一度ありがとう! =) – Carlo
遅い方法にアクセスできない場合、やあ、それを行う方法はありますか?たとえば、slowFuncがブラックボックスにあり、そのメソッドを呼び出すだけのアクセス権があるが、その中の何も変更しないとします。 – Carlo