让我们有以下情况
// method from class A
public async Task FooAsync()
{
return Task.Factory.StartNew(() => { //code_block_1 });
}
// method from class B
public async Task BarAsync()
{
return Task.Factory.StartNew(() => { //code_block_2 });
}
和MVC控制器中的动作方法
public async void SomeAction()
{
A a = new A();
B b = new B();
Task t1 = a.FooAsync();
Task t2 = b.BarAsync();
// Some other code 1
await Task.WhenAll(t1, t2);
// Some other code 2
}
发送对该操作的请求。我认为一切都应该有效:
最后我的问题......我是对的吗?我错了什么,它是什么?我错过了什么吗?
答案 0 :(得分:1)
是的,这几乎完全准确。
它可能是执行“SomeAction”的同一个线程
如果是这种情况,那么调用StartNew
就没有意义了。此方法旨在创建并行性。它永远不会强调任务。您可能会将此与Wait
内联未启动的任务混淆。
请注意,由于并行性,您启动的请求处理将阻止2个线程而不是1个线程。如果你没有使用await
,它就会花费3。