Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当控制器已经在ASP.NET核心中使用异步时,服务中的方法也必须是异步的吗?_C#_Asp.net_Multithreading_Asp.net Core_Asynchronous - Fatal编程技术网

C# 当控制器已经在ASP.NET核心中使用异步时,服务中的方法也必须是异步的吗?

C# 当控制器已经在ASP.NET核心中使用异步时,服务中的方法也必须是异步的吗?,c#,asp.net,multithreading,asp.net-core,asynchronous,C#,Asp.net,Multithreading,Asp.net Core,Asynchronous,我对ASP.NET核心中的异步编程非常陌生。我已经为我的checktoken功能提供了服务和控制器。这是我在我的身份验证服务中的方法: public AppUser CheckToken(string token) { if (token == null || string.IsNullOrWhiteSpace(token)) throw new CustomUnauthorizedException("Unauthorized", "You are not author

我对ASP.NET核心中的异步编程非常陌生。我已经为我的checktoken功能提供了服务控制器。这是我在我的身份验证服务中的方法:

public AppUser CheckToken(string token)
{
    if (token == null || string.IsNullOrWhiteSpace(token))
        throw new CustomUnauthorizedException("Unauthorized", "You are not authorized to perform this action");

    var user = _context.DbSet<AppUser>().Query.FirstOrDefault(x => x.TOKEN == token);
    if (user == null)
        throw new CustomUnauthorizedException("Unauthorized", "You are not authorized to perform this action");

    return user;
}
[HttpGet("{Id}")]
public async Task<ActionResult<IEnumerable<Follow>>> GetFollows([FromHeader]string token, long Id)
{
    var user = _authService.CheckToken(token);
    return await _context.DbSet<Follow>().Query.Where(x => x.Id == Id && x.UserId == 
    user.UserId).ToListAsync();
}
public-AppUser检查令牌(字符串令牌)
{
if(token==null | | string.IsNullOrWhiteSpace(token))
抛出新的CustomUnauthorizedException(“未经授权”,“您无权执行此操作”);

var user=_context.DbSet

一般来说,任何I/O代码都应该在ASP.NET核心应用程序中异步完成。这包括所有数据库查询


ASP.NET上的异步代码实际上会使每个请求的运行速度稍慢,但它也会减少应用程序使用的线程数,从而允许应用程序处理更多的同时请求。

一般来说,任何I/O代码都应该在ASP.NET核心应用程序中异步执行。这包括所有数据库查询


ASP.NET上的异步代码实际上会使每个请求的运行速度稍慢,但它也会减少应用程序使用的线程数,从而使应用程序能够处理更多的同时请求。

这取决于,如果您想处理在服务中获得的对象,是否要将它们写入redis缓存,例如n这将是异步的。如果您只使用服务加载/保存内容,而不将它们存储在其他地方,则不需要。我自己喜欢验证我的对象,因此我的服务方法主要是异步的。因此,当我使用异步twices时,这不是一个问题?一个用于服务,一个用于控制器?不,这很好,但如果您真的需要想知道吗,还有基于性能的问题,你将不得不对这个问题进行基准测试很多人很早就对
async
/
await
感到困惑。
async
所做的一切,实际上就是让你在这个方法中编写
await
。所有
await
所做的就是等待已经实现的异步从别处开始,没有阻塞。这取决于,如果你想处理你在服务中得到的对象,比如在redis缓存中写入它们,那么这样做的动作是异步的。如果你只是用服务加载/保存东西,而不将它们存储在其他地方,就不需要了。我自己喜欢验证我的objects所以我的服务方法大部分是异步的。所以当我使用异步twices时,这不是一个问题?一个用于服务,一个用于控制器?不,这很好,但是如果你真的想知道,也基于性能,你将不得不对这个问题进行基准测试。很多人很早就对
异步
/
等待
感到困惑sync
实际上是让您在该方法中写入
await
。所有
await
所做的就是等待已在其他地方启动的异步操作,而不阻塞。