什么时候使用Task.Run浪费或妄想?

Jam*_*ite 0 c# asynchronous async-await

我有一个读取/写入对象到存储的接口.在一种情况下,存储是具有异步方法的数据库.在另一种情况下,它只是一个cookie.

我认为它建议在异步调用结束时沿着路径使用异步,因此看起来有意义的接口也是异步的.但是在cookie的情况下,我只是设置几个字段并将其粘贴在响应中,因此还没有任何异步.我可以在等待Task.Run()来匹配新接口,但我不知道这是否可取或是否对性能有负面影响.

该怎么办?

public interface IProfileStore
{
    async Task SetProfile(UserProfile profile);
}

public async Task SetProfile(UserProfile profile)
{
    // Look mom, I'm needlessly async
    await Task.Run(() =>
    {
        var cookie = new HttpCookie(AnonymousCookieName);
        cookie["name"] = profile.FullName;
        HttpContext.Current.Response.Cookies.Add(cookie);
    });
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

你不应该这样做; 你只是在创造不必要的线程池流失.

相反,async从方法中删除关键字,只需return Task.FromResult(0)返回同步完成的任务