相关疑难解决方法(0)

在ASP.NET Core中相关的ConfigureAwait(false)?

我在GitHub上偶然发现了一个问题(https://github.com/HTBox/allReady/issues/1313),在那里他们讨论了如何ConfigureAwait(false)ASP.NET核心中删除代码

呼叫ConfigureAwait(false)是多余的,什么都不做

我能找到的最好的答案是一个"旁注"(来自Stephen Cleary,https: //stackoverflow.com/a/40220190/2805831 )

ASP.NET Core不再具有"上下文"

那么,ASP.NET Core中ConfigureAwait(false)真的没必要(即使使用完整的.Net Framework)?在某些情况下,它在性能方面是否有任何实际的好处,或者在结果/语义上有所不同?

编辑:如果我将其作为控制台应用程序托管或在IIS中,它在这方面有所不同吗?

.net async-await asp.net-core

70
推荐指数
2
解决办法
2万
查看次数

即使在Asp.Net流中使用ConfigureAwait(false)后死锁也是如此

即使使用后我也遇到死锁ConfigureAwait(false),下面是示例代码.

根据示例http://blog.stephencleary.com/2012/02/async-and-await.html(#Avoding Context),这不应该是死锁.

这是我的班级:

public class ProjectsRetriever
{
    public string GetProjects()
    {
        ...
        var projects = this.GetProjects(uri).Result;
        ...
        ...
    }

    private async Task<IEnumerable<Project>> GetProjects(Uri uri)
    {
        return await this.projectSystem.GetProjects(uri, Constants.UserName).ConfigureAwait(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

该类来自共享库:

public class ProjectSystem
{
    public async Task<IEnumerable<Project>> GetProjects(Uri uri, string userName)
    {
        var projectClient = this.GetHttpClient<ProjectHttpClient>(uri);
        var projects = await projectClient.GetProjects();
        // code here is never hit
        ...
}
Run Code Online (Sandbox Code Playgroud)

如果我在共享库中添加ConfigureAwait(false)以等待调用,则会起作用,其中进行HttpClient调用:

public class ProjectSystem
{
    public async Task<IEnumerable<Project>> GetProjects(Uri uri, string userName)
    {
        var …
Run Code Online (Sandbox Code Playgroud)

c# asp.net deadlock task-parallel-library async-await

12
推荐指数
2
解决办法
7082
查看次数