将 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; } }
}
...这样就可以随时从 Task.ContinueWith(action, TaskSchedulerReference.UiTaskScheduler)
回调中的任何后台线程通知 UI。
是否保证引用在整个应用程序生命周期内保持有效?
最佳答案
除了那个可疑的//UI线程首先访问这个类
,是的。请改用显式初始化程序(从 UI 线程显式运行),JIT 不保证在 UI 线程上运行类初始化程序。
但是,我更喜欢将上下文捕获为局部变量。在多线程(和异步编程)中,将任何内容公开为全局状态是很棘手的。始终尝试尽可能使用本地状态。它还带有旧的 IsInvokeRequired
模式的味道。每个方法都应该非常明确地说明在哪里发生的事情 - 否则很容易意外地引入可重入代码和死锁。
关于c# - 将 UI 线程的 TaskScheduler 存储在字段中是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700781/