jer*_*erg 2 c# wpf asynchronous async-await
将UI线程的TaskScheduler存储在字段中是否安全,如下所示:
class TaskSchedulerReference {
private readonly _uiTaskScheduler;
// Constructor is called by the UI Thead
public TaskSchedulerReference() {
_uiTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext()
}
public TaskScheduler UiTaskScheduler { get { return _uiTaskScheduler; } }
}
Run Code Online (Sandbox Code Playgroud)
...这样就可以随时从Task.ContinueWith(action, TaskSchedulerReference.UiTaskScheduler)回调中的任何后台线程通知UI .
是否保证在整个应用程序生命周期中引用仍然有效?
除了那个可疑的// This class is first visited by the UI Thread,是的.使用显式初始化程序(显式地从UI线程运行),JIT不保证在UI线程上运行类初始化程序.
但是,我更喜欢将上下文捕获为局部变量.在多线程(和异步编程)中暴露任何全局状态都很棘手.始终尝试尽可能使用本地状态.它也充满了旧IsInvokeRequired模式.每个方法都应该非常明确地说明在哪里发生 - 否则很容易意外地引入重入代码和死锁.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |