小编Mom*_*omo的帖子

C#HttpClient - PostAsync不返回(即使使用ConfigureAwait)

我在C#中使用HttpClient时疯狂...

我简化了我的项目,因此可以更轻松地复制我的问题.我想做的就是在后台调用HttpClient.PostAsync而不阻塞我的UI窗口(我正在使用WPF btw).

这是我的代码(将代码删到了min.):Bing仅用于此处不显示我的私人网络服务,它当然可以替换为其他所有网站.

    private async void Window_Loaded(object sender, RoutedEventArgs e)
    {
        try {
            MyTextBlock.Text = "Waiting...";

            Uri webUri = new Uri("https://www.bing.com/");
            using (HttpClient client = new HttpClient()) {
                using (HttpResponseMessage response = await client.PostAsync(webUri, new MultipartFormDataContent())) {
                    MyTextBlock.Text = await response.Content.ReadAsStringAsync();                       
                }
            }
        } catch (Exception exc) {
            MessageBox.Show(exc.ToString(), "Unhandled Exception");
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我的UI正在等待异步发布请求时,它在TextBox中显示"Waiting".当异步请求返回时,它会显示结果.什么都不应该发生.

所以这里出现了问题,有时候PostAsync方法根本就不会返回......甚至会忽略Timeout.当我调试它总是有效,但当我尝试启动应用程序时,它有时会挂起.并不总是哪个不能让错误更容易找到.我尝试了多种方法来调用请求异步,但每次都是同样的问题.

我也阅读了以下博客,其中包含异步方法中的阻塞问题,但即使使用ConfigureAwait也没有区别. http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

我可以想象在HttpClient async方法中存在一个问题,锁定主线程,因此它会导致这个问题.Wenn我在ConsoleApplication中使用相同的代码一切都很好.我的客户端和目的地之间有一个代理,但这应该不是问题.

有人可以复制这个问题吗?我在.NET Framework 4.6.1中使用C#/ WPF.

c# wpf httpclient blocking async-await

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

缩进的AvalonEdit折叠策略(Python)

有人尝试过按缩进级别创建FoldingStrategy吗?就像用于python的编程语言一样。

BraceFoldingStrategy没问题,因为您有固定的开始和结束标签。是否有人想为制表符缩进创建此符号?

c# python avalonedit

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

标签 统计

c# ×2

async-await ×1

avalonedit ×1

blocking ×1

httpclient ×1

python ×1

wpf ×1