C# .NET Core 2.1-我的代码未出现在VS2017堆栈跟踪中

C# .NET Core 2.1-我的代码未出现在VS2017堆栈跟踪中,c#,.net-core,visual-studio-2017,visual-studio-debugging,C#,.net Core,Visual Studio 2017,Visual Studio Debugging,我正在使用依赖注入(Microsoft.Extensions.DependencyInjection)开发一个.NET Core 2.1控制台应用程序。代码如下所示: class Program { static async Task Main(string[] args) { //... var configuration = GetConfiguration(); var serviceProvider = Configure

我正在使用依赖注入(Microsoft.Extensions.DependencyInjection)开发一个.NET Core 2.1控制台应用程序。代码如下所示:

class Program
{
    static async Task Main(string[] args)
    {
        //...

        var configuration = GetConfiguration();
        var serviceProvider = ConfigureServices(configuration);

        var importer = serviceProvider.GetRequiredService<DataImporter>();

        var result = await importer.ImportCentersAndStores(fileName);

        //...
    }

    private static IConfigurationRoot GetConfiguration()
    {
        return new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .Build();
    }

    private static ServiceProvider ConfigureServices(IConfigurationRoot configuration)
    {
        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

        return new ServiceCollection()
            .AddLogging(builder =>
            {
                builder.AddConfiguration(configuration.GetSection("Logging"));
                builder.AddConsole();
            })
            .AddOptions()
            .AddAutoMapper()
            .AddDatabase(configuration.GetConnectionString("Blah"))
            .AddTransient<DataImporter>()
            .BuildServiceProvider();
    }
}

有人能解释一下吗?

在第二个屏幕截图上:异常助手(弹出)->查看详细信息->堆栈跟踪。这将是在
async
启动之前引发异常时的正确堆栈跟踪


所以-是的-这种行为是因为你的
async
东西。老实说,这让我很好奇,为什么你会在控制台应用程序中执行任何
异步

Mike,有很多用例:1。显而易见的一点是:调用异步的东西。2.构建一个事件监听器(例如通过rabbitmq和wy进行通信)很简单:我正在注入和使用另一个程序集(ConfigureServices中的AddDatabase行)的内容。有一些异步的东西更容易从异步方法调用,但你是说这都是因为异步?但这通常不会产生这些后果…?我会放弃异步,看看会发生什么。@TorHaugen是的,如果你必须使用已经存在的异步方法,这是有意义的。我认为,如果您
.RunSynchronously()
完成该任务,并且在适当的位置安装了符号,那么它应该可以工作。但是关于pumpkin所说的,这也取决于stop on exceptions(停止异常)对话框的设置。您可以使用
CTRL+ALT+E
启用在CLR选项上停止所有异常,这样代码爆炸的位置将停止代码。堆栈跟踪是垃圾,由异步。。。因为代码正在另一个进程的另一个堆栈上运行。。线程的常见问题。我认为VS2019应该带来更好的东西。您还可以尝试启用源链接。。通过从Microsoft下载源代码,它可以让您进入这些dll的代码,但这仍然无法解决堆栈问题
async
堆栈跟踪的问题实际上是由于开发人员的误解。堆栈跟踪不会告诉您代码来自何处,而且它从来没有告诉过您。堆栈跟踪告诉您代码返回的位置。碰巧这些对于同步代码是相同的,所以开发人员习惯了堆栈跟踪,告诉他们如何到达某个地方(即因果链)。在异步世界中,因果链和堆栈跟踪是不同的东西;它们在同步世界中只有相同的值。
<LangVersion>7.1</LangVersion>