gpt4 book ai didi

c# - C#中的异步任务执行

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:36 24 4
gpt4 key购买 nike

我是 C# 中的 TAP 和 TPL 的新手,在谷歌搜索和阅读一些 Material 后,我无法理解异步任务是如何执行的。(特别是在哪个线程上)请帮助我了解以下两个选项中哪一个是正确的:

如果异步任务在调用它们的同一个线程上执行,那么如果我创建 1000 个任务并且它们都将在同一个线程上按时间切片执行怎么办?如果不是这样并且任务在不同的线程上执行,那么它与多线程(并行执行)有何不同?

最佳答案

If async tasks are executed on the same thread on which they are invoked, then what if I create 1000 tasks and they all will be executed by time slicing on same thread?

由于异步任务不在调用它们的同一线程上执行,因此考虑它们是否都将以某种特定方式执行是没有意义的。在任何情况下,.NET 中都没有在单个线程内“时间片”的机制。时间片是在线程的粒度上完成的;即 CPU 时间被授予线程,而不是线程的子集。

一些场景中涉及async方法,一个给定的线程可能服务于两个或多个任务。这是线程池的本质所固有的,线程池在整个 TPL API 中被广泛使用。但是,从“并发”这个词的任何意义上来说,这些方法将得到服务的唯一原因是,如果它们本身正在等待其他异步操作。在这些情况下,它们可以合作让出线程,此时其他一些任务可能会使用它。

if it is not so and tasks execute on different threads then how is it different from multi-threading (parallel execution)?

asyncTask是“并行执行”的超集。也就是说,一些任务是并行执行的。但是asyncTask也用于根本不涉及执行的操作,而只是等待 CPU 外部发生一些异步事件(例如网络或文件 I/O)。

计算任务将被分配一个单独的线程,供该任务在任务期间使用。其他类型的异步操作根本不会使用线程。

对于计算任务,这些在基本层面上与多线程没有什么不同。就像编程中的许多事情一样,更多的是 asyncTask提供有用的抽象,使人们可以更轻松地编写代码以利用计算机中的多线程功能,同时还表示在语义上类似于并发计算操作的非计算操作。


我已尽力尽可能直接和简洁地回答您的问题。但是,如果以上内容提出的新问题与旧问题的回答一样多,我也不会感到惊讶。不幸的是,这就是潜在广泛问题的性质。我确实希望以上内容能满足您的好奇心,但如果没有,那将意味着您的原始问题对于 Stack Overflow 而言过于宽泛。请考虑重写您的问题,以便更具体地关注一个问题;包括 a good, minimal, complete code example上下文,以便可以以特定的方式解决问题,而不会产生歧义。

关于c# - C#中的异步任务执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623246/

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