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);