Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpContext在wait Task.Factory.FromAsync(BeginXxx,EndXxx)之后为null_C#_Wcf_Asynchronous_Task Parallel Library_Async Await - Fatal编程技术网

C# HttpContext在wait Task.Factory.FromAsync(BeginXxx,EndXxx)之后为null

C# HttpContext在wait Task.Factory.FromAsync(BeginXxx,EndXxx)之后为null,c#,wcf,asynchronous,task-parallel-library,async-await,C#,Wcf,Asynchronous,Task Parallel Library,Async Await,我有一个Asp.Net应用程序,它使用svcutil生成的代理调用某些WCF服务。 生成的代理具有APM模式中的异步方法(BeginXxx、EndXxx) 我使用异步目标包是为了利用新的async/await模式,我的目标平台是.net 4.0(否则我就不必使用异步目标包) 我正在使用Task.Factory.fromsync将APM模式转换为可以等待的任务 我的代码看起来有点像这样(假设服务方法不接受任何参数并返回int: int result = await Task<int>.

我有一个Asp.Net应用程序,它使用svcutil生成的代理调用某些WCF服务。 生成的代理具有APM模式中的异步方法(BeginXxx、EndXxx)

我使用异步目标包是为了利用新的
async/await
模式,我的目标平台是.net 4.0(否则我就不必使用异步目标包)

我正在使用
Task.Factory.fromsync
将APM模式转换为可以等待的任务

我的代码看起来有点像这样(假设服务方法不接受任何参数并返回int:

int result = await Task<int>.Factory.FromAsync(proxy.BeginXxx, proxy.EndXxx, state: null);
HttpContext.Current.Items["reuslt"] = result;
int result=wait Task.Factory.fromsync(proxy.BeginXxx,proxy.EndXxx,state:null);
HttpContext.Current.Items[“reuslt”]=结果;
第二行抛出一个
NullReferenceException

我假设原因是回调(即在等待调用之后运行的所有内容)没有原始的同步上下文

其他方法(如Factory.StartNew)接收可用于保存上下文的
TaskScheduler

FromAsync方法还具有接收
TaskScheduler
,但没有一个将begin方法作为参数的方法


假设我不想手动将Http上下文作为方法参数传递给此行之后调用的所有方法,那么如何使用获取任务调度程序或以其他方式获取.Net的重载来尊重我的同步上下文?

我怀疑问题实际上在ASP.Net管道中,而不是在
同步C中ontext

Async Targeting Pack启用了
Async
/
Wait
支持,但有,而且Targeting Pack不包括该支持


尝试使用(用于web窗体)或(用于MVC)帮助ASP.NET管道。即使如此,管道中仍有一些地方无法接受异步代码(在ASP.NET 4.5中仍然是这样,但至少4.5会检测到这一点并抛出错误).

是否确定在FromAsync调用之前正确设置了synccontext。在FromAsync调用之前,我可以访问HttpContext。因此,我尝试使用接收计划程序的重载,但没有效果。您的分析似乎是正确的。我在流的开头结束了获取HttpContext.Current的过程(但它仍然不是null)通过流的其余部分传递它。IIS和.net 4.5中webapi的任何提示。其行为与@ronyl相同