いくつかの http リクエストを作成し、タスクで実行する機能があります。その関数は途中で中断される可能性があります。タスクを中止できないため、関数にいくつかのブール条件を追加しました。例:
public int foo(ref bool cancel)
{
if(cancel)
{
return null
}
//do some work...
if(cancel)
{
return null
}
//http webrequest
if(cancel)
{
return null
}
}
これは非常にうまく機能しましたが、これはかなり醜いコードです。
もう 1 つの問題は、Web 要求を既に実行していて、応答を取得するのに関数 cncelation に時間がかかるよりも時間がかかることです (応答を取得するまで)。
これを確認するより良い方法はありますか?または、タスクの代わりにスレッドを使用する必要がありますか?
編集
キャンセルトークンを追加しました: cancelationTokenSource を宣言し、そのトークンをタスクに渡しました
CancellationTokenSource cncelToken = new CancellationTokenSource();
Task t = new Task(() => {foo()},cancelToken.token);
cancelToken.Cancel(); を行うとき 私はまだ応答を待っていますが、tsk はキャンセルされません。