按顺序执行异步方法
execute aync methods in order
我有:
public myclass
{
public async Task method1();
public async Task method2();
public async Task method3();
}
我实现了一个函数,它应该在 myclass 对象上依次执行这 3 个方法。我不确定哪种方式更好 (performance/correctness):
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);
只有第一个例子是正确的。
即使您修复了第二个示例,使其返回一个 Task
对象,您仍然会遇到每个单独的方法将与其他两个方法同时运行的问题,这似乎正是您想要的不想要。 IE。在第二个示例中,您无需等待一个方法完成就可以调用下一个方法。
由于无论如何您都必须在第二个示例中添加某种等待,只是为了使其正常工作,您应该继续使用正确的、惯用的 async
/await
在你的第一个例子中看到的技术。
我有:
public myclass
{
public async Task method1();
public async Task method2();
public async Task method3();
}
我实现了一个函数,它应该在 myclass 对象上依次执行这 3 个方法。我不确定哪种方式更好 (performance/correctness): 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);
只有第一个例子是正确的。
即使您修复了第二个示例,使其返回一个 Task
对象,您仍然会遇到每个单独的方法将与其他两个方法同时运行的问题,这似乎正是您想要的不想要。 IE。在第二个示例中,您无需等待一个方法完成就可以调用下一个方法。
由于无论如何您都必须在第二个示例中添加某种等待,只是为了使其正常工作,您应该继续使用正确的、惯用的 async
/await
在你的第一个例子中看到的技术。