Parallel.ForEach
ループのキャンセルを許可しようとしています。 this MSDN articleによれば、それは可能であり、私はそれらのコーディングに従っています。処理されていないOperationCanceledExceptionがParallel.ForEachからスローされたとき
// Tokens for cancellation
ParallelOptions po = new ParallelOptions();
po.CancellationToken = cts.Token;
try
{
Parallel.ForEach(queries, po, (currentQuery) =>
{
// Execute query
ExecuteQuery(currentQuery);
// Throw exception if cancelled
po.CancellationToken.ThrowIfCancellationRequested(); // ***
});
}
catch (OperationCanceledException cancelException)
{
Console.WriteLine(cancelException.Message);
}
、私はライン上でアプリがクラッシュすると、エラーと上記のアスタリスクでマークされ、ユーザーがアクセス可能な機能からcts.Cancel();
を呼び出す:
System.OperationCanceledException was unhandled by user code
Message=The operation was canceled.
Source=mscorlib
StackTrace:
at System.Threading.CancellationToken.ThrowIfCancellationRequested()
at CraigslistReader.SearchObject.<>c__DisplayClass7.<bw_DoWork>b__5(Query currentQuery) in {PATH}:line 286
at System.Threading.Tasks.Parallel.<>c__DisplayClass2d`2.<ForEachWorker>b__23(Int32 i)
at System.Threading.Tasks.Parallel.<>c__DisplayClassf`1.<ForWorker>b__c()
InnerException:
私はすぐそこに例外ハンドラを持っているので、私はクラッシュを理解していない。何か案は?
私はあなたが記述している問題は表示されません。「キャッチ」はうまく動作します。あなたの問題を示す完全で短いコードを投稿できますか? – svick
私は、少なくともこの例外を除いて、アプリケーションがクラッシュしたとは思わない。あなたのアプリがクラッシュしていないか(クラッシュしたことをどのように知っていますか?)、またはこれが最後に発生した例外ではありません。 – usr
@usrはい、あなたは正しいです。私はデバッガでそれを実行していましたが、例外が実行時を停止するのを見たとき、私はアプリをクラッシュさせる例外だと考えました。私はいくつかの例外がそれらをクラッシュさせているのを知らなかった。 – Doug