Ans*_*hul 8 c# parallel-processing multithreading task-parallel-library
请注意,我知道Parallel.Invoke()用于任务同步.我的问题是:
有没有办法使用Parallel.Invoke这样的调用匿名方法,其中调用不等待执行完成?
我认为并行执行(或并行调用)的重点是不必等待任务完成.如果你想等待一段代码完成执行,而不是使用Parallel.Invoke,为什么不直接调用代码呢?我想我只是不明白Parallel.Invoke的意思.文档只说明它的作用,但没有提到任何用例,这比直接调用代码更有用.
Jon*_*eet 10
如果你想等待一段代码完成执行,而不是使用Parallel.Invoke,为什么不直接调用代码呢?
通常你会打电话Parallel.Invoke给多件工作.如果你连续执行这些工作,它(可能)比并行执行它们需要更长的时间.
"并行执行"与"在后台执行"不同 - 您似乎正在寻找后者,但这不是什么意思Parallel.Invoke.
如果您只想启动任务,请使用Task.Run(或Task.Factory.StartNew在.NET 4.5之前).Parallel.Invoke专门用于并行执行一系列操作,然后等待这些并行操作完成.
作为一个具体示例,您可以通过分区执行排序,然后并行递归地对枢轴的两侧进行排序.这样做会使用多个内核,但是在进行之前,您通常仍希望等到整个排序完成.
如果您不想等待完成,只需将您的Parallel.Invoke电话打包Task.
Task.Factory.StartNew( () =>
{
Parallel.Invoke( <one or more actions> );
} );
Run Code Online (Sandbox Code Playgroud)
你在寻找这样的东西吗?
async Task ParallelInvokeAsync(Action[] actions)
{
var tasks = actions.Select(a => Task.Run(a));
await Task.WhenAll(tasks);
}
Run Code Online (Sandbox Code Playgroud)
后台执行:
ParallelInvokeAsync(actions);
MessageBox.Show("I'm working");
Run Code Online (Sandbox Code Playgroud)
带阻塞的后台执行,非常类似于Parallel.Invoke:
ParallelInvokeAsync(actions).Wait();
MessageBox.Show("I'm dome working");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11400 次 |
| 最近记录: |