异步等待和线程 [英] Async await and threads

查看:58
本文介绍了异步等待和线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用async-await和任务,但是我无法理解一件事:

I am working with async-await and tasks, but I can't understand the one thing:

异步任务是否在单独的线程中执行?

如msdn所说(异步编程):

async和await关键字不会导致创建其他线程.异步方法不需要多线程,因为异步方法不会在其自己的线程上运行.

The async and await keywords don't cause additional threads to be created. Async methods don't require multithreading because an async method doesn't run on its own thread.

但是在ThreadPool类的说明中的备注中(

But in the remarks in description of ThreadPool class (ThreadPool Class):

使用线程池线程的操作示例如下:

Examples of operations that use thread pool threads include the following:

创建任务或任务对象以异步执行某些任务时,默认情况下,该任务计划在线程池线程上运行.

When you create a Task or Task object to perform some task asynchronously, by default the task is scheduled to run on a thread pool thread.

所以,现在我不明白async任务是否使用单独的线程.请给我解释一下.谢谢.

So, now I don't understand if async task uses separate thread. Explain me please. Thanks.

推荐答案

Task不一定 表示多余的线程.

A Task does not necessarily represent an extra thread.

如果您await一个Task,则将控制流返回到方法的调用者,直到某人"将Task设置为已完成.

If you await a Task, you return the control flow to the caller of your method until "someone" sets the Task as completed.

如果通过Task.Run()Task.Factory.StartNew()启动Task,则传递给这些调用的操作将在另一个线程上执行(不是新线程,而是ThreadPool中的一个).

If you start a Task via Task.Run() or Task.Factory.StartNew(), then the action you pass to these calls is executed on another thread (not a new one, but one from the ThreadPool).

这篇关于异步等待和线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆