我有一个类,旨在为应用程序中多次使用的某些特定文件提供快速访问其元数据。不幸的是,其中一些元数据只能通过非常耗时的方法调用来提取。
我有另一个类,为长时间运行的方法提供了异步包装器(根据文件大小可能需要5分钟或更长时间),但我正在尝试弄清楚如何调用此异步方法,以及是否适合将其放入构造函数中,或者是否存在更好的设计模式来处理这种情况。
以下是一些伪代码,以尝试说明我的问题:
我在尝试弄清楚是否有更好的方法来完成这个过程?
目前我的代码几乎不需要等待构建
我有另一个类,为长时间运行的方法提供了异步包装器(根据文件大小可能需要5分钟或更长时间),但我正在尝试弄清楚如何调用此异步方法,以及是否适合将其放入构造函数中,或者是否存在更好的设计模式来处理这种情况。
以下是一些伪代码,以尝试说明我的问题:
public class MetaData
{
public string Data1 { get; private set; }
public string Data2 { get; private set; }
public MetaData(String filepath)
{
var extractor = new ExtractMetaData(filepath); //create instance of class that fetches the metadata
this.Data1 = extractor.GetData1(); // short running method
extractor.Data2Received += Data2Received;
extractor.GetData2Async(); // long running method, called with via async method
}
private void Data2Received(object sender, MetaDataEventArgs args)
{
this.Data2 = args.Data; // finally set Data2 property
}
}
class ExtractMetaData
{
public event Data2ReceivedEventHandler Data2Received;
public ExtractMetaData (string filePath) { }
public String GetData1(); // very fast method to get Data1
public void GetData2Async(); // very slow method to get Data2
}
我在尝试弄清楚是否有更好的方法来完成这个过程?
目前我的代码几乎不需要等待构建
MetaData
,但如果有人在GetData2Async()
方法返回并触发Data2Received
事件之前就尝试访问MetaData.Data2
属性,则会收到null
的响应。但是如果他们在返回后调用它,它将包含正确的信息。由于没有真正的方法通知用户此方法已完成,我担心这将成为糟糕的用户体验,因为他们不必等待构造函数,但必须等待所有属性被设置。