我正在编写一个集成测试,我想避免
.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’时避免使用‘异步’lambda)。异步 void 位于 Action action = async () ...
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.Read
中使用互斥体。因此,我想使用 Parallel.Invoke
(或并行调用的替代方法)模拟多客户端环境,以测试 TimeOutException。
Reader.Read
返回一个可等待的类 Job<TResult>
。
public static class Reader
{
public static Job<TResult> Read() { }
}
提前谢谢您。
附注我尝试切换到
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);
}