C# 当等待异步方法中包装的非异步操作时,应用程序启动
我正在调用一个没有异步接口的第三方程序集,但是我的代码在其他方面是异步的。我可以在等待操作时做一些工作,所以我将其包装为异步,以允许干净的调用代码C# 当等待异步方法中包装的非异步操作时,应用程序启动,c#,asynchronous,async-await,C#,Asynchronous,Async Await,我正在调用一个没有异步接口的第三方程序集,但是我的代码在其他方面是异步的。我可以在等待操作时做一些工作,所以我将其包装为异步,以允许干净的调用代码 static Task<string[]> GetRequiredFields(string path) { return Task.Run(() => { Aspose.Words.Document doc = null; try
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();
});
}
这是不可能的
var thetask = await GetRequiredFields(merge.DocxPath);
“不是”的意思是,如果我包装它,它不会抛出异常。它会立即从整个应用程序中爆炸出来。因此,我不太确定包含async关键字与直接访问结果有什么不同
如果我一步一步地浏览代码,我会发现在我用包装好的代码实例化文档的那一行,所有的代码都会中断。它不会被抓起来。当调试器分离并且应用程序退出时,将跳过文档行 这是一个控制台应用程序吗?是的,它当前在一个控制台应用程序下。你可以试着在管理员权限下运行VS,看看它是否失败吗?它已经在管理员权限下运行了。我正在afraid@DanRevell:控制台的
Main
方法是否等待异步请求完成?
var thetask = await GetRequiredFields(merge.DocxPath);