加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 多个等待操作或只有一个

发布时间:2020-12-15 23:32:25 所属栏目:百科 来源:网络整理
导读:我已经看到了如何实现await关键字以及它创建的结果.我想我对它有一个基本的了解.但是,是 public async Task DoWork(){ await this.Operation1Async(); await this.Operation2Async(); await this.Operation3Async();} “更好”(一般来说)或 public async Tas
我已经看到了如何实现await关键字以及它创建的结果.我想我对它有一个基本的了解.但是,是

public async Task DoWork()
{
    await this.Operation1Async();
    await this.Operation2Async();
    await this.Operation3Async();
}

“更好”(一般来说)或

public async Task DoWork()
{
    await this.Operation1Async();
    this.Operation2();
    this.Operation3();
}

第一种方法的问题是它为每个等待调用创建一个新任务?这需要一个新线程?

而第一个在第一个等待时创建一个新任务,然后在新任务中处理那里的所有内容?

编辑
好吧也许我不太清楚,但如果我们有

while (await reader.ReadAsync())
{
    //...
}

await reader.NextResultAsync();

// ...

这不是创造两个任务吗?一个在主线程中使用第一个ReadAsync,然后在这个新创建的任务中使用NextResultAsync执行另一个任务.我的问题是第二项任务真的需要,不是
在主线程中创建的一个任务是否足够?所以

while (await reader.ReadAsync())
{
    //...
}

reader.NextResult();

// ...

解决方法

it is creating a new Task for each await call? Which entails a new thread?

是的,不是.是的,它正在为每个异步方法创建一个Task;异步状态机将创建一个.但是,这些任务不是线程,也不是在线程上运行.他们不会在任何地方“奔跑”.

您可能会发现我的一些博客文章很有用:

> async intro,它解释了异步/等待工作的方式.
> There Is No Thread,它解释了任务在没有线程的情况下如何工作.
> Intro to the Task type,它解释了一些任务(委托任务)如何在线程上运行代码并运行,但async(Promise Tasks)使用的任务却没有.

Whereas the first creates a new Task on the first await and then everything from there is processed in the new Task?

一点也不.任务只完成一次,并且该方法将不会继续等待该任务完成.因此,在调用Operation2之前,Operation1Async返回的任务已经完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读