gpt4 book ai didi

c# - 控制台应用程序在异步调用完成之前终止

转载 作者:IT王子 更新时间:2023-10-29 04:02:07 28 4
gpt4 key购买 nike

我目前正在编写一个 C# 控制台应用程序,它生成许多指向网站上不同图像的 URL,然后使用 WebClient.DownloadDataAsync() 作为字节流下载。

我的问题是,一旦进行了第一个异步调用,控制台应用程序就会认为程序已完成并在异步调用返回之前终止。通过使用 Console.Read(),我可以强制控制台保持打开状态,但这似乎不是一个很好的设计。此外,如果用户在此过程中按下回车键(当控制台正在等待输入时),程序将终止。

有没有更好的方法来防止在等待异步调用返回时关闭控制台?

编辑:调用是异步的,因为我在下载发生时通过控制台向用户提供状态指示器。

最佳答案

是的。使用ManualResetEvent ,并让异步回调调用 event.Set()。如果 Main 例程在 event.WaitOne() 上阻塞,它将在异步代码完成之前不会退出。

基本的伪代码如下所示:

static ManualResetEvent resetEvent = new ManualResetEvent(false);

static void Main()
{
CallAsyncMethod();
resetEvent.WaitOne(); // Blocks until "set"
}

void DownloadDataCallback()
{
// Do your processing on completion...

resetEvent.Set(); // Allow the program to exit
}

关于c# - 控制台应用程序在异步调用完成之前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3840795/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com