gpt4 book ai didi

c# - 当您使用 async-await 时,我在何处定义任务以及在何处等待它是否重要?

转载 作者:行者123 更新时间:2023-11-30 14:07:26 24 4
gpt4 key购买 nike

我在看示例方法

public async Task MyMethodAsync()
{
Task<int> longRunningTask = LongRunningOperationAsync();
// independent work which doesn't need the result of LongRunningOperationAsync can be done here

//and now we call await on the task
int result = await longRunningTask;
//use the result
Console.WriteLine(result);
}

来自 How and When to use `async` and `await`我对它的工作原理有疑问。

所以假设我在它说我可以的地方添加了一些“独立工作”。

public async Task MyMethodAsync()
{
Task<int> longRunningTask = LongRunningOperationAsync();
int millionthPrimeNumber = GetMillionthPrimeNumber();
int result = await longRunningTask;
//use the result
Console.WriteLine(result % millionthPrimeNumber);
}

获得第 100 万个素数是独立的工作,所以我希望它是夹在 Task<int> longRunningTask = LongRunningOperationAsync(); 之间的那种东西和 int result = await longRunningTask;

然而,我很好奇的是我是否可以只写

public async Task MyMethodAsync()
{
int result = await LongRunningOperationAsync();
int millionthPrimeNumber = GetMillionthPrimeNumber();
//use the result
Console.WriteLine(result % millionthPrimeNumber);
}

这是否等价?或者 Task<int> longRunningTask = LongRunningOperationAsync();int result = await longRunningTask;实际上作为标志,以便可以完成的独立工作是他们之间的任何事情?

最佳答案

很多人误解了这一点。

首先:await 不启动任务。调用任务返回方法启动任务。 Await 不会导致同步的方法神奇地变成异步的。

那么 await 做了什么?等待意味着此点之后的内容将在任务完成后的某个时间运行。就是这样。这就是它的意思。为此,它异步等待 任务完成。 “异步等待”是指“返回调用者,以便在我们等待时可以完成更多工作”。

如果任务产生一个值,则 await 将从已完成的任务中提取值。这是完全一致的:如果后面的代码取决于任务的值(value),那么它也取决于正在完成的任务!

您应该在您的代码中在后面的代码取决于等待的任务是否已完成的地方放置

would that be equivalent or not?

它们是等价的,因为它们最终都会产生相同的结果。它们在表示不同的异步工作流的意义上并不等同。

关于c# - 当您使用 async-await 时,我在何处定义任务以及在何处等待它是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41092977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com