c# – Async / Await:ConfigureAwait的意外行为
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Async / Await:ConfigureAwait的意外行为,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1856字,纯文字阅读大概需要3分钟。
内容图文
![c# – Async / Await:ConfigureAwait的意外行为](/upload/InfoBanner/zyjiaocheng/803/fe053b1bd16d4e2d9205ac0ace4dbc27.jpg)
如果在ASP.NET MVC中执行以下代码,您可以在调试窗口中看到它将在等待后正确恢复线程的文化,即使ManagedThreadId发生更改:
public async Task<ActionResult> Index()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
Debug.WriteLine(Thread.CurrentThread.CurrentUICulture);
await SomeMethod();
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
Debug.WriteLine(Thread.CurrentThread.CurrentUICulture);
return View();
}
private async Task SomeMethod()
{
await Task.Delay(100).ConfigureAwait(false);
}
然后我将ConfigureAwait(false)从SomeMethod()移动到Index(),除此之外,它与上面的代码相同:
public async Task<ActionResult> Index()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
Debug.WriteLine(Thread.CurrentThread.CurrentUICulture);
await SomeMethod().ConfigureAwait(false);
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
Debug.WriteLine(Thread.CurrentThread.CurrentUICulture);
return View();
}
private async Task SomeMethod()
{
await Task.Delay(100);
}
现在它不会恢复我的文化,但总是把它设置为新的CultureInfo(“en-US”).但我希望使用这两种方法,结果必须相同.它绝对不清楚,为什么会发生这种情况.
解决方法:
如果使用await task.ConfigureAwait(false),则该方法的其余部分(以及从那里调用的任何内容)将不会在原始上下文中执行.但这不会影响逻辑调用树中更高的代码.
而且我认为这是实现它的唯一合理方式.如果必须在原始上下文中执行更高的代码(这是很常见的),那么在库代码深处的某处的ConfigureAwait()实际上不应该影响它.
为了使其更具体,如果ConfigureAwait()根据您的行为表现如下,在Winforms中使用await的以下简单示例将不起作用:
async void ButtonClicked(object sender, EventArgs e)
{
textBlock.Text = "Downloading";
await DownloadAsync();
textBlock.Text = "Finished";
}
async Task DownloadAsync()
{
data = await new HttpClient().GetStringAsync(url).ConfigureAwait(false);
}
内容总结
以上是互联网集市为您收集整理的c# – Async / Await:ConfigureAwait的意外行为全部内容,希望文章能够帮你解决c# – Async / Await:ConfigureAwait的意外行为所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。