我将首先解释“部分”异步的含义:
我有一个方法A
可以做很多事情。其中之一是调用另一种B
(完全)异步的方法。结果,我让A
返回任务B
并继续执行其余的A
工作。
NowA
也是一个异步方法,但是之前B
调用的所有内容仍然是同步的。根据TAP,异步方法在返回任务之前应该只做最少的同步工作。
在这种情况下我该怎么办?
这些是我考虑过的选项:
- 让任何代码调用
A
包装A
在一个任务中。- 只是不要后缀
A
“异步”。 - 也不要做
B
异步。
- 只是不要后缀
- 使
A
完全异步。
- 使用异步后缀
A
并将整个包装A
在一个任务中。 - 不要再做
B
异步了,因为A
's Task 已经包装了它。
- 使用异步后缀
代码:
根据
public Task BAsync() {
return Task.Run(B);
}
private void B() { /* stuff.. */ }
选项 1.1
public async Task A() {
// stuff..
await BAsync();
// stuff..
}
选项 1.2
public void A() {
// stuff..
B();
// stuff..
}
选项 2.1
public Task AAsync() {
return Task.Run(A);
}
private async Task A() {
// stuff..
await BAsync();
// stuff..
}
选项 2.2
public Task AAsync() {
return Task.Run(A);
}
private void A() {
// stuff..
B();
// stuff..
}