c# – 正在进行长时间运行的调用异步这么简单吗?

我只是,为了粗略的草案,使用以下模式将大量数据访问方法转换为异步,并且它看起来太简单,不适合以后的迭代.它有多安全,缺少什么,我应该怎么做?

提供长时间呼叫的服务:

private class UserService
{
    public IdentityUser GetById(int id)
    {
        ...
    }
}

private UserService _userService = new UserService();

原始的同步方法

public IdentityUser GetById(int id)
{
    return _userService.GetById(id);
}

我奇妙的新异步方法

public async Task<IdentityUser> GetByIdAsync(int id)
{
    await Task.Run(() => _userService.GetById(id));
}

解决方法

你不应该像这样做“假异步方法
public async Task<IdentityUser> GetByIdAsync(int id)
{
    await Task.Run(() => _userService.GetById(id));
}

我称之为“假异步”的原因是因为没有任何关于操作的内在异步.在这种情况下,您应该只有同步方法.如果调用者想通过使用Task.Run使其异步,他可以这样做.

什么时候本质上是异步的?当您向Web服务或数据库发出请求时,例如,在发送请求和接收响应之间存在等待时间 – 请求是本质上异步操作.要避免阻塞调用线程,请使用async-await.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...