项目中Task封装从WCF返回的方法,其中该方法有六个参数,但是封装的时候无法出现相对应的参数。
return Task<ObservableCollection<SubEvent>>.Factory.FromAsync(this.Channel.BeginGetSubEventByIdForSEReplier, this.Channel.EndGetSubEventByIdForSEReplier, applierAssignmentId, replierAssignmentId, applierSubEventId, sEMaxSpanLength, isNeedFilterTime,null);
请问这到底是什么原因?解决方法是什么?!
.NET4.0和.NET4.5中TASK的API有调整。。先确认你用了对应API的版本吧
什么意思?!是对参数的个数有限制吗?!
@鹭起欣河: 也许是API不同,所以参数不同。。如果用同一个版本,那么API是相同的
@滴答的雨: 对比了下.NET4.0和.NET4.5中TASK的API,我发现我用的这个方法Task<Tresult>.Factory.FromAsync()这个方法参数都是一样的,没变过,但是参数的个数都是小于等于三,所以会不会是这个接口最多有三个参数,如果参数大于三个,就会无法识别?!
@鹭起欣河: 你访问的API开出几个参数,那么你只能按照规则去传参额
@滴答的雨: 我访问的API 有六个参数,但是编译无法识别。这就是我问的问题。。。。
“封装的时候无法出现相对应的参数”具体是指什么?
具体指服务端方法的参数,WCF调用,然后Task封装,封装的参数应该是与服务端相对应的啊,但是以上代码不能通过,这是为什么?!
WCF 自动生成的代码如下:
System.IAsyncResult BeginGetSubEventByIdForSEReplier(long applierAssignmentId, long replierAssignmentId, long applierSubEventId, int sEMaxSpanLength, bool isNeedFilterTime, System.AsyncCallback callback, object asyncState);
System.Collections.ObjectModel.ObservableCollection<Substitution.Silverlight.Model.ServiceAPI.SubEvent> EndGetSubEventByIdForSEReplier(System.IAsyncResult result);
@鹭起欣河: 还是不是很明白,编译时会出现什么错误提示?
@dudu: Teamviewer可以用吗?
@dudu:
private async void Init() { //部分代码省略 var orgs = await _serviceClient.GetAllOrganizationTaskAsync(); } //通过WCF调用,采取分布类,名称一样。 public partial class ServiceClient { public Task<ObservableCollection<Organization>> GetAllOrganizationTaskAsync() { //Task 封装APM return Task<ObservableCollection<Organization>>.Factory.FromAsync(this.Channel.BeginGetAllOrganization, this.Channel.EndGetAllOrganization, null); } }
@dudu:
@鹭起欣河: 试试:
ask<ObservableCollection<Organization>>
.Factory
.FromAsync(()=>{ 调用WCF的代码; });
@dudu: