首页 新闻 会员 周边 捐助

Task封装APM

0
悬赏园豆:20 [已解决问题] 解决于 2013-07-25 15:10

项目中Task封装从WCF返回的方法,其中该方法有六个参数,但是封装的时候无法出现相对应的参数。

 return
                Task<ObservableCollection<SubEvent>>.Factory.FromAsync(this.Channel.BeginGetSubEventByIdForSEReplier,
                                                                       this.Channel.EndGetSubEventByIdForSEReplier,
                                                                       applierAssignmentId, replierAssignmentId, applierSubEventId, sEMaxSpanLength, isNeedFilterTime,null);

 

请问这到底是什么原因?解决方法是什么?!

土星的山羊的主页 土星的山羊 | 初学一级 | 园豆:191
提问于:2013-07-22 11:11
< >
分享
最佳答案
0

.NET4.0和.NET4.5中TASK的API有调整。。先确认你用了对应API的版本吧

收获园豆:20
滴答的雨 | 老鸟四级 |园豆:3660 | 2013-07-22 14:03

什么意思?!是对参数的个数有限制吗?!

土星的山羊 | 园豆:191 (初学一级) | 2013-07-22 14:05

@鹭起欣河: 也许是API不同,所以参数不同。。如果用同一个版本,那么API是相同的

滴答的雨 | 园豆:3660 (老鸟四级) | 2013-07-22 15:10

@滴答的雨: 对比了下.NET4.0和.NET4.5中TASK的API,我发现我用的这个方法Task<Tresult>.Factory.FromAsync()这个方法参数都是一样的,没变过,但是参数的个数都是小于等于三,所以会不会是这个接口最多有三个参数,如果参数大于三个,就会无法识别?!

土星的山羊 | 园豆:191 (初学一级) | 2013-07-22 16:30

@鹭起欣河: 你访问的API开出几个参数,那么你只能按照规则去传参额

滴答的雨 | 园豆:3660 (老鸟四级) | 2013-07-22 17:04

@滴答的雨: 我访问的API 有六个参数,但是编译无法识别。这就是我问的问题。。。。

土星的山羊 | 园豆:191 (初学一级) | 2013-07-22 17:34
其他回答(1)
0

封装的时候无法出现相对应的参数”具体是指什么?

dudu | 园豆:30778 (高人七级) | 2013-07-22 11:52

具体指服务端方法的参数,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);
支持(0) 反对(0) 土星的山羊 | 园豆:191 (初学一级) | 2013-07-22 12:32

@鹭起欣河: 还是不是很明白,编译时会出现什么错误提示?

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2013-07-22 12:36

@dudu: Teamviewer可以用吗?

支持(0) 反对(0) 土星的山羊 | 园豆:191 (初学一级) | 2013-07-22 12:42

@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);
         }
}
支持(0) 反对(0) 土星的山羊 | 园豆:191 (初学一级) | 2013-07-22 12:44

@dudu: 

支持(0) 反对(0) 土星的山羊 | 园豆:191 (初学一级) | 2013-07-22 12:50

@鹭起欣河: 试试:

ask<ObservableCollection<Organization>>
.Factory
.FromAsync(()=>{ 调用WCF的代码; });
支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2013-07-22 12:59

@dudu: 

支持(0) 反对(0) 土星的山羊 | 园豆:191 (初学一级) | 2013-07-22 13:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册