我正在调用没有异步接口的第三方程序集,但我的代码是异步的。我在等待操作时可以做的工作,所以我将它包装在异步中以允许干净的调用代码。
static Task<string[]> GetRequiredFields(string path)
{
return Task.Run(() =>
{
Aspose.Words.Document doc = null;
try
{
doc = new Aspose.Words.Document(path);
}
catch
{
throw new Exception("Failed to load doc");
}
return doc.MailMerge.GetFieldNames();
});
}
我理解这是包装它的正确方法。我从方法名称本身中省略了单词async,以暗示调用者实际上并不是真正的异步。
这有效
var thetask = GetRequiredFields(merge.DocxPath);
var result = thetask.Result;
这不是
var thetask = await GetRequiredFields(merge.DocxPath);
不是&#39;我的意思是如果我把它包起来它不会抛出异常。它只是立即轰炸整个应用程序。所以我不太清楚async关键字的包含与直接访问结果有什么不同。
如果我单步执行代码,我发现它在我在包装代码中实例化文档的行中断了。它不会被捕获。跨越文档行是调试器分离并退出应用程序的时间。