gpt4 book ai didi

C# 异步/等待 I/O 绑定(bind)与 CPU 绑定(bind)操作

转载 作者:太空狗 更新时间:2023-10-30 00:37:34 31 4
gpt4 key购买 nike

我正在学习 C# 中的异步编程。在 this文章 我发现对于 IO-Bound 操作你不应该使用 Task.Run() 但我不知道如何在没有 Task.Run() 的情况下创建任务......例如我想创建一个名为 GetPageCountAsync 的自定义方法,查询数据库并返回结果。我已经有同步查询数据库的方法 GetPageCount。我不知道更好的方法:

private async Task<int> GetPageCountAsync()
{
return await Task.Run(() => GetPageCount());
}

没有 Task.Run 怎么办?我找到了 SqlCommand 类的 ExecuteReaderAsync 方法,但我想知道这个方法是如何实现的?没有任务。运行?如果是,怎么办?

最佳答案

无论您使用什么框架来执行 IO 操作,都有责任为您提供固有的异步操作。它可以提供返回 Task 的方法,或提供一些其他异步操作(即接受回调、返回 IAsyncResult、触发事件等的方法)可以变成一个任务

如果您调用的操作已经同步阻塞线程,直到异步结果完成,那么已经太晚了。 大多数 数据库框架都擅长提供某种形式的异步查询数据库的方式,因此很可能有另一种方法供您使用。如果您使用的框架提供该方法的任何异步版本,那么您就无法避免使用多线程;该框架的作者已将您的选择权从您手中夺走。

关于C# 异步/等待 I/O 绑定(bind)与 CPU 绑定(bind)操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48624597/

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