此使用 TPL 的实现是否会在 STA 线程上的进程 运行 内工作?

Will this implementation using TPL work inside a process running on an STA thread?

我想从实现我在我的表单应用程序中定义的接口的程序集中创建一个对象的实例。我会在应用程序启动时使用 Activator.CreateInstance 创建此对象,并保留对它的应用程序级引用。

在这个应用程序的某些时刻,我想调用这个对象的方法而不用使用 Task.Run(() => IMyObject.DoSomeWork(someList, someList2)) 来阻止主线程。我只想进行 "fire and forget" void 方法调用,我不需要等待甚至注册回调。

应用程序 运行 在 STA 线程中这一事实会带来问题吗?我是否必须担心在主线程上实例化并在任务闭包中引用的对象泄漏或过早收集?我只打算阅读这些列表的内容,而不是修改它们。

不用担心;一旦创建委托,它引用的所有对象都将保存在内存中,至少在 Task.Run 退出之前。 STA 线程不会改变这一点。

线程根本不会影响 GC - 除了 运行 线程的所有堆栈都包含根对象。您可以根据需要交叉引用对象,并且不会混淆 GC。