异步实例化类

本文关键字:实例化 异步 | 更新日期: 2023-09-27 18:30:23

所以我有一些C#代码实例化了一个通过COM对象导出的类。该特定实例化调用是阻塞调用(需要从外部源下载数据)。因此,使我的 C# 阻塞。

是否可以异步实例化对象?

异步实例化类

这取决于。

通常,您可以启动Task以在后台线程上实例化对象。 使用 C# 5,这可以像以下那样简单:

var yourObject = await Task.Run(() => new TheObject());

但是,由于这是一个 COM 对象,因此对象本身很可能具有线程相关性。 如果 COM 对象需要单线程单元线程,则需要为其保证 STA 线程。 如果它具有线程相关性,则可能需要在 UI 线程上执行此操作。

我通过使用BeginInvoke和EndInovke异步解决了这个问题。即使使用 COM 对象,.EndInovke调用能够检索数据。这从根本上改变了软件的工作方式。