我想了解async/await关键字是如何工作的。我有一个WPF窗口上的textblock绑定到一个TextBlockContent字符串属性和一个按钮触发点击ChangeText()。当我指定ConfigureAwait(false)时,为什么仍然在主线程中?
这里是我的代码:
public async void ChangeText()
{
string mystring = await TestAsync();
this.TextBlockContent= mystring;
}
private async Task<string> TestAsync()
{
var mystring = await GetSomeString().ConfigureAwait(false);
mystring = mystring + "defg";
return mystring;
}
private Task<string> GetSomeString()
{
return Task.Run(() =>
{
return "abc";
});
}
从我阅读,我明白了ConfigureAwait设置为false,让我指定我不想保存当前上下文的任务的“休息”需要在await关键字后执行。
调试后我意识到,当我有这段代码时,有时代码在主线程后面运行:等待GetSomeString()。ConfigureAwait(false);而我特别添加了配置等待。
我原以为它总是运行在它进入任务之前的那个不同的线程上。
有人可以帮我理解为什么吗?
非常感谢您
我2美分:如果你真的想确保你继续在'await'后的新线程,你可以用[自定义awaiter](http://stackoverflow.com/questions/18779393/the-lack-的,非捕获任务屈服的力量,我使用的任务 - 运行 - 为什么 - 跟踪这一点)。不过,这被认为是不好的做法。 – Noseratio