这块代码应该...
async void SomeMethodAsync() {
this.IsDoingLongRunningWork = true;
await Task.Run(() =>
{
DoLongRunningWork();
this.IsDoingLongRunningWork = false;
});
}
。行为与此代码块不同...
async void SomeMethodAsync() {
this.IsDoingLongRunningWork = true;
await Task.Run(() =>
{
DoLongRunningWork();
});
this.IsDoingLongRunningWork = false;
}
...?
一方面,它们很可能在不同的线程中执行。如果IsDoingLongRunningWork
影响用户界面(例如),则可能只应在 UI 线程中更改它,在这种情况下,第一个代码不正确(新任务将在线程池线程中运行),第二个代码正确(假设该方法是从 UI 线程调用的)。
顺便说一句,你的代码中有一个语法错误。每个await
语句都缺少);
。
答案在很大程度上取决于是否存在同步上下文。例如,我很确定如果此代码在控制台应用程序中运行,则 await
语句之后的代码可以在与 await
之前的代码不同的线程中执行。但是,在 Windows 应用程序(使用 UI 线程同步上下文)中,代码将在 await
完成后返回到主 UI 线程(假设 await
之前的代码在主 UI 线程上执行)。
如果没有更多的上下文,答案是肯定的:代码是不同的。至少,确保IsDoingLongRunningWork
是线程安全的。