在等待任务中访问“使用变量”

时间:2015-12-17 20:42:03

标签: c# async-await using

在下面的代码块中,我收到proc变量的警告,Task.Run内的3行。警告说明“获得处置关闭”。我相信这段代码实际上是安全的;该任务的await将阻止using块退出并处置proc。代码似乎按照我期望的方式工作,在运行时没有错误。但是,我对Async / Await模式有点新,并且想要确保没有一些微妙的竞争条件,或者我忽略的其他东西,警告正试图提醒我。

Task内的代码是否像我编写的那样安全?

public async Task<int> BuildInstaller()
{
    var paths = new PathInfo();
    PrepareWorkingDirectory(paths);

    using (var proc = new Process())
    {
        proc.StartInfo.FileName = paths.MsBuildPath;
        proc.StartInfo.Arguments = $"{paths.SolutionDirectory}\\FoodSafety.Installer.sln /t:Rebuild /p:Configuration=SingleImage";
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.CreateNoWindow = true;
        proc.StartInfo.UseShellExecute = false;
        proc.OutputDataReceived += (sender, e) =>
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() => { BuildOutput.Add(e.Data); }), null);
        };

        await Task.Run(() =>
        {
            proc.Start();
            proc.BeginOutputReadLine();
            proc.WaitForExit();
        });

        return proc.ExitCode;
    }
}

0 个答案:

没有答案