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

标签 c# asynchronous webclient windows-console

我目前正在编写一个 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/

相关文章:

c# - 为什么在更改用户控制代码后构建应用程序时应用程序会导致整个 visual studio 崩溃?

c# - 在控制台应用程序中注入(inject) ILoggerFactory 与在 asp.net core 1.1 中实例化一个

c# - 通过反射将 T 包装在 Nullable<T> 中

c# - Wcf 并行和异步调用?

swift - 在 Swift 中创建异步 Action

c# - 下载网站数据的最快方法 C#

c# - 使用C#将文件上传到Web服务器

c# - UserControl引发异常“跨线程操作无效”

python - 郁金香/异步IO : why not all calls be async and specify when things should be synchronous?

c# - WebClient.DownloadFile 和正确的 url 操作已超时