相关疑难解决方法(0)

在C#中"返回等待"的目的是什么?

没有像这样编写方法的场景:

public async Task<SomeResult> DoSomethingAsync()
{
    // Some synchronous code might or might not be here... //
    return await DoAnotherThingAsync();
}
Run Code Online (Sandbox Code Playgroud)

而不是这个:

public Task<SomeResult> DoSomethingAsync()
{
    // Some synchronous code might or might not be here... //
    return DoAnotherThingAsync();
}
Run Code Online (Sandbox Code Playgroud)

会有意义吗?

为什么return await在可以直接Task<T>从内部DoAnotherThingAsync()调用返回时使用构造?

return await在很多地方看到代码,我想我应该错过一些东西.但据我了解,在这种情况下不使用async/await关键字并直接返回Task将在功能上等效.为什么要增加附加await层的额外开销?

.net c# async-await .net-4.5

219
推荐指数
7
解决办法
3万
查看次数

C# ASP.NET Core API 异步/等待 VS 结果

我对 C# 和任务的最佳实践有点困惑。
当我学习 C# 和任务时,它总是一个等待任务的异步函数。但最近我做了一些研究,发现有些人的说法并非如此。他们还表示,限制 async 和 wait 的使用可以提高性能和 RAM 使用率。

例如,在这篇 Stackoverflow 文章中,它说您不应该总是等待每个任务,但该示例不适用于 ASP.NET API,并且没有任何以前的数据用于获取新数据。 这篇文章也赞成不要总是等待每项任务。但这个例子又是一个正在传递的简单任务。

所以我的问题是当有另一个任务必须等待第二个任务时。您可以使用.Result还是我们使用 async/await 更好。因为我听说.Result正在阻塞当前线程。但我看不出当前线程如何不会被等待阻塞,因为第二个语句需要第一个语句的输出。

没有异步/等待的示例

public Task<User> SaveUser(User user) 
{
    var dbUser = _userRepository.GetByUid(user.Id).Result;
    if(dbUser == null) {
        dbUser = new User();
        dbUser.Id = Guid.NewGuid();
    }
    dbUser.Name = user.Name;

    return _userRepository.Save(dbUser);

}
Run Code Online (Sandbox Code Playgroud)

异步/等待示例

public async Task<User> SaveUser(User user) 
{
    var dbUser = await _userRepository.GetByUid(user.Id);
    if(dbUser == null) {
        dbUser = new User();
        dbUser.Id = Guid.NewGuid();
    } …
Run Code Online (Sandbox Code Playgroud)

c# async-await asp.net-core asp.net-core-webapi

1
推荐指数
1
解决办法
3051
查看次数