Sub*_*Dev 2 c# parallel-processing asynchronous async-await
这是我不明白的事情。假设我
DoSomething();
await SomeAsyncMethod;
DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)
而我的机器一次只能运行 1 个任务。然后SomeAsyncMethod必须以某种方式阻止程序——也许它不会立即阻止DoSomethingElse()运行,它必须在某个时候中断程序以便它可以运行SomeAsyncMethod。对?
然后 SomeAsyncMethod 必须以某种方式阻止程序
不,它没有。它是异步的。异步的定义意味着它不会阻塞;调用者将在方法返回后继续执行,而没有完成其工作,并且工作将在稍后的时间点完成。
它必须在某个时候中断程序,以便它可以运行 SomeAsyncMethod。对?
不,它是异步的。它甚至可能根本不是需要由 CPU 执行的工作。
让我们在这里打个比方。您订购了一个包裹。在包裹到达之前,您是否被禁止做任何事情?你是否被迫坐在你家门前明确地等待那个包裹,在它到达之前无法做任何其他事情?或者你可以下班,做其他工作,然后在某个时间点,当包裹到达你的台阶时(不一定是立即,你可以在它交付后的任何时间去取)你可以打开它起来做任何你需要做的事情。
这是一个固有的异步操作。你开始异步操作(点东西)然后你可以做任何你想做的事,直到你开始的操作完成,完全不占用你的时间,然后在某个时间点,在操作完成后,你可以使用该操作的结果。
编程时可以执行的一种异步操作是要求另一个线程执行某些 CPU 密集型工作,并且该工作可能(也可能不会)在第二个处理器上执行,但是还有各种其他类型的异步操作不需要其他处理器,例如 IO(例如,执行网络请求),它实际上总是固有的异步,并且与“订购包裹”类比非常吻合,在某些触发器(事件等)之后执行操作.),你可以有一个异步操作,它本身由一个或多个其他异步操作等组成。
有关更深入解释的另一个示例,请参阅此帖子。
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |