我正在编写一个集成测试,我想避免 .Wait() 调用
public void MyTest_MultiClient_NoException()
{
Action action = () => Reader.Read(@"C:\MyFolder\MyFile.data").Wait();
var actions = Enumerable.Repeat(action, 1000).ToArray();
Parallel.Invoke(actions);
}
或 async void 被 Visual Studio 警告(“当委托类型返回 'void' 时避免使用 'async' lambda)。
public void MyTest_MultiClient_NoException()
{
Action action = async () => await Reader.Read(@"C:\MyFolder\MyFile.data");
var actions = Enumerable.Repeat(action, 1000).ToArray();
Parallel.Invoke(actions);
}
我在 Reader 的静态构造函数的方法中使用了互斥体。因此,我想使用 Parallel.Invoke (或并行调用的替代方法)模拟多客户端环境,以测试 TimeOutException。
Reader.Read
返回一个可等待的类 Job<TResult>
。
提前谢谢您。
我尝试切换到
Func<Job<TResult>>
而不是 Action
,但 Parallel.Invoke 对此没有重载。
由于
Reader.Read
返回可等待类型,您可以 await
它并使用 Task<TResult>
LINQ 运算符将其投影到
Select
。然后使用 Task.WaitAll
方法等待所有任务。
public void MyTest_MultiClient_NoException()
{
Task<TResult>[] tasks = Enumerable.Range(0, 1000)
.Select(async _ => await Reader.Read(@"C:\MyFolder\MyFile.data"))
.ToArray();
Task.WaitAll(tasks);
}