我有一个任务正在等待将属性设置为 true(= 已完成)。我接收该属性值更改的方式是通过 EventHandler (System.Diagnostics.Process.OutputDataReceived
准确地说 - 它不断读取另一个进程的输出,直到提供正确的输出)。然而,一直检查财产感觉有些低效。我尝试添加一个滴答的小延迟,因为我相信如果这样可以节省 CPU 时间,我可以让自己等待,但我读到 .NET 与小数毫秒的斗争。我可以改进这段代码吗?
private ConcurrentBag<string> _allMessages = new ConcurrentBag<string>();
public OutputRetriever()
{
var process = new System.Diagnostics.Process();
...
process.OutputDataReceived += OutputDataReceived;
process.Start();
}
public async Task<string[]> GetAllOutput()
{
while (!IsCompleted)
{
// how to properly wait here?
// await Task.Delay(TimeSpan.FromTicks(1)); // is this ok?
}
return _allMessages.ToArray();
}
private void ConsoleDataReceived(object sender, DataReceivedEventArgs e)
{
_allMessages.Add(e?.Data);
if (e?.Data == "success")
{
IsCompleted = true;
}
}