在下面的代码块中,我收到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;
}
}