等待外部任务 - 警告 VSTHRD003

问题描述 投票:0回答:1

假设我有一个具有 StartAsync 和 StopAsync 的可启动类。当调用 StopAsync 时,该方法会等待,直到必要的任务完成并正确处理(将一些内容写入数据库等,这些内容不能轻易取消,并且可能需要时间)。我想在课堂上创建一个任务 将其传递给 StopAsync 没问题,但根据 VisualStudio.Threading 则不然,它可能会导致死锁。

为了模拟这种情况,我有这个示例类:

class Startable
{
    private Task _runningTask;

    public Task StartAsync()
    {
        _runningTask = Task.Delay(TimeSpan.FromSeconds(600));
        return Task.Completed;
    }

    public Task StopAsync()
    {
        return _runningTask;
    }
}

我在我的应用程序中使用 Microsoft.VisualStudio.Threading nuget,它会生成警告 VSTHRD003。 我的问题是,当我需要等待从随机线程上下文创建的任务完成时,处理这种情况的正确方法是什么?就我而言,该应用程序是 8.0 Net 中的控制台应用程序,所以我想死锁不应该发生,但我仍然很好奇我应该如何做到这一点。

c# .net async-await task
1个回答
0
投票

VisualStudio.Threading
最初是为 Visual Studio 扩展而设计的。虽然此库中的几种类型在其他应用程序中很有用,但库设计的某些部分假设您正在编写 Visual Studio 扩展。

在这种情况下,警告不适用于您。没有主 UI 线程,并且(AFAICT)控制台应用程序中不需要可连接的任务工厂。

© www.soinside.com 2019 - 2024. All rights reserved.