var r = WebRequest.Create(uri);
ManualResetEvent re = new ManualResetEvent(false);
r.BeginGetRequestStream(x =>
{
re.Set();
rs = r.EndGetRequestStream(a_r);
}, null);
re.WaitOne();
run OK.But this:
var r = WebRequest.Create(uri);
ManualResetEvent re = new ManualResetEvent(false);
r.BeginGetRequestStream(x =>
{
rs = r.EndGetRequestStream(a_r);
re.Set();//change
}, null);
re.WaitOne();
just hangs forever.
According to docs x=>{} lambda executed in "worker thread",but in "EndGetRequestStream" we see "AsyncHelper.BeginOnUI->UiSynchronizationContext.Current.Send()" for lambda,so we have deadlock. How understand(and resolve) that statement?
XASD
Member
97 Points
60 Posts
BeginGetRequestStream anomaly
Jun 16, 2008 05:45 PM | LINK
var r = WebRequest.Create(uri); ManualResetEvent re = new ManualResetEvent(false); r.BeginGetRequestStream(x => { re.Set(); rs = r.EndGetRequestStream(a_r); }, null); re.WaitOne();run OK.But this:var r = WebRequest.Create(uri); ManualResetEvent re = new ManualResetEvent(false); r.BeginGetRequestStream(x => { rs = r.EndGetRequestStream(a_r); re.Set();//change }, null); re.WaitOne();just hangs forever.According to docs x=>{} lambda executed in "worker thread",but in "EndGetRequestStream" we see "AsyncHelper.BeginOnUI->UiSynchronizationContext.Current.Send()" for lambda,so we have deadlock. How understand(and resolve) that statement?
Thanks.