Mat*_*ell 4 .net c# asynchronous .net-4.0
我正在尝试使用FtpWebRequest异步调用(BeginGetResponse/ EndGetResponse).
但是,似乎回调来自BeginGetResponse与我的应用程序在同一个线程中运行,当我在印象中它将使用不同的(和线程池)线程.这意味着我的应用程序在继续之前阻止回调.
我已经设置了LINQPad概念验证如下:
"Starting".Dump();
Thread.CurrentThread.GetHashCode().Dump();
Thread.CurrentThread.IsThreadPoolThread.Dump();
IAsyncResult result = request.BeginGetResponse((ar) =>
{
"Inside Callback".Dump();
Thread.CurrentThread.GetHashCode().Dump();
Thread.CurrentThread.IsThreadPoolThread.Dump();
var resp = request.EndGetResponse(ar);
"Callback Complete".Dump();
}, null);
"After Callback".Dump();
Run Code Online (Sandbox Code Playgroud)
这打印输出如下:
Starting
33
False
Inside Callback
33
False
Callback Complete
After Callback
Run Code Online (Sandbox Code Playgroud)
我期望的是这样的(假设回调花了足够长的时间来运行):
Starting
33
False
Inside Callback
44
True
After Callback // App continues despite callback running
Callback Complete
Run Code Online (Sandbox Code Playgroud)
回调在相同的应用程序线程上运行,这意味着如果回调中的某些内容需要很长时间(例如,引入Thread.Sleepfor参数),我的应用程序就会阻塞.这意味着我无法在请求上设置超时(例如,使用a ThreadPool.RegisterWaitForSingleObject).
我在这里错过了什么吗?
| 归档时间: |
|
| 查看次数: |
1288 次 |
| 最近记录: |