Ray*_*jax 5 c# parallel-processing task multiprocessing
我有不同的任务从不同的文件中读取并在其中找到一个单词.我把它们放入一个任务数组,我从waitAny方法开始,如下所示:
foreach (string file in filesList)
{
files[i] = Task.Factory.StartNew(() =>
{
mySearch.Invoke(file);
});
i++;
}
System.Threading.Tasks.Task.WaitAny(files);
Run Code Online (Sandbox Code Playgroud)
我想在其中一个任务完成后立即停止所有其他任务(它在找到该单词时结束).目前,有了waitany,我可以知道一个任务什么时候结束,但我不知道怎么知道哪一个完成了以及如何停止其他任务.实现这一目标的最佳方法是什么?
您可以使用CancellationToken所有任务将共享的单个。内部方法验证取消任务mySearch.Invoke的值。token.IsCancellationRequested当某些任务完成时,通过 取消其他任务CancellationTokenSource.Cancel()。
var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
foreach (string file in filesList)
{
// pass cancellation token to your task
files[i] = Task.Factory.StartNew(() => mySearch.Invoke(file, token), token);
i++;
}
Task.WaitAny(files);
tokenSource.Cancel();
Run Code Online (Sandbox Code Playgroud)
顺便说一句,OperationCanceledException当源被取消时,您可以通过调用强制抛出令牌token.ThrowIfCancellationRequested()
| 归档时间: |
|
| 查看次数: |
2628 次 |
| 最近记录: |