用N个并发线程并行运行一个作业
本文关键字:一个 作业 并行 并发 线程 运行 | 更新日期: 2023-09-27 17:53:27
有时我需要一个测试方法由N个线程同时执行(就像在ASP中发生的那样)。NET代码)。
对于Task Library
是否有简单的方法来做到这一点?
[TestMethod()]
public void DoSomethingTest()
{
// Do something which has concurrency issues i.e. database, IO, ...
DoSomething();
}
// Something like:
[TestMethod()]
public void DoSomethingTest()
{
int n = 1000; // run 1000 of DoSomething() simultaneously
Parallel.Invoke(() => DoSomething(), n);
}
是的,有一个并行。For:
[TestMethod()]
public void DoSomethingTest()
{
int n = 10; // changed to 10, see comment
Parallel.For(0, n, i => DoSomething());
// here all threads are completed
}
但是请注意,TPL将决定并行的数量,就像ASP一样。净Threadpool…
你可以添加ParallelOptions来设置并行度,但我不会。
是的,我测试了一些与TPL并行的方法。
下面是一些示例代码:var parent = Task.Factory.StartNew(() =>
{
var tasksI = Task.Factory.StartNew(() =>
{
for (int i = 0; i < Constants.TaskCount; i++)
DoMethod1Parallel();
});
var tasksII = Task.Factory.StartNew(() =>
{
for (int i = 0; i < Constants.TaskCount; i++)
DoMethod2Parallel()
});
tasksI .Wait();
tasksII.Wait();
});
parent.Wait();
Assert.AreNotEqual(parent.IsFaulted, "Executing is faulted!");
我不止一次调用Method1和Method2,并且与TPL并行。所以我可以验证并行执行的能力!
问候,帕特里克。