按顺序执行异步方法

时间:2015-02-08 21:53:34

标签: c# asynchronous async-await

我有:

public myclass
{
public async Task method1();
public async Task method2();
public async Task method3();
}

我实现了一个函数,它应该在myclass对象上一个接一个地执行这3个方法。我不确定哪种方式更好(性能/正确性): 1)

public async Task mymethod(myclass obj)
{
await obj.method1();
await obj.method2();
await obj.method3();
}
myclass myobj = new myclass();
await myobj.method(myobj);

2)

public Task mymethod(myclass obj)
{
obj.method1();
obj.method2();
obj.method3();
}
myclass myobj = new myclass();
await myobj.method(myobj);

1 个答案:

答案 0 :(得分:2)

只有第一个例子是正确的。

即使你修复了第二个例子以便它返回一个Task对象,你仍然会遇到问题,即每个单独的方法将与其他两个方法同时运行,这似乎正是你的不要想要。即在第二个例子中,在调用下一个方法之前,不要等待一个方法完成。

由于您无需为第二个示例添加某种等待,只是为了使其正常工作,您应该继续使用正确的惯用async / await技术在你的第一个例子中看到。