使用异步编程时,了解异步执行代码和创建可等待方法之间的区别至关重要。
Task.Run 和异步执行:
Task.Run 在后台线程上执行代码,使其看起来是异步的。然而,这种方法并没有创建真正的异步方法。调用线程保持阻塞状态,直到任务完成。
示例:
private async Task DoWork2Async() { Task.Run(() => { int result = 1 + 2; }); }
在此示例中,DoWork2Async 并不是真正的异步,因为调用线程仍将被阻塞而任务在后台线程上执行。
本机异步方法:
本机异步方法使用 async 关键字声明,并在执行开始之前将控制权交还给调用者。然后,调用者可以在等待异步操作完成的同时继续执行其他代码。
示例:
private async Task DoWork1Async() { int result = 1 + 2; }
在此示例中,DoWork1Async 是本机异步方法。当你等待它时,调用线程将被释放,允许其他代码执行,同时等待异步操作完成。
结论:
创建一个如果可以等待异步方法,则应使用 async 关键字,而不将同步代码包装在 Task.Run 中。这允许真正的异步执行,其中调用线程在执行异步操作时不会被阻塞。
以上是异步方法:Task.Run 与本机异步 - 我什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!