确保UI更新位于UI线程上

Jay*_*uzi 4 c# async-await

考虑:

async Task FooAsync()
{
    await BarAsync().ConfigureAwait(false);

    UpdateUI(); // Bug
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种系统地确保不会发生这种情况的方法.

也许是一种命名约定,其中必须在UI线程上运行的方法获得特殊后缀.或静态检查,其中方法上的[UIThreadOnlyAttribute]意味着任何调用者必须具有相同的属性,并且可能不会调用ConfigureAwait(false).

有什么建议?

Ste*_*ary 7

只要您的应用程序合理分层,就不应该成为问题.

UI层(例如,事件处理程序)和逻辑UI层(例如,ViewModel)需要UI上下文而不应使用ConfigureAwait.其他层应该使用ConfigureAwait.这是一个对我有用的简单指南.