Wcf PCL服务引用设置中禁用了基于任务的异步操作

Wcf PCL服务引用设置中禁用了基于任务的异步操作,wcf,asynchronous,xamarin,portable-class-library,xamarin.forms,Wcf,Asynchronous,Xamarin,Portable Class Library,Xamarin.forms,我目前正在构建一个基于Xamarin的移动应用程序。对于该项目,我已经使用Framework4.5创建了一个PCL项目。我使用VS2013作为开发IDE。现在我想向这个PCL添加一个WCF服务引用。在向这个PCL项目添加服务引用时,我注意到异步操作的生成被禁用。请查看图片了解更多详细信息 我通过Nuget将BCL.Async包添加到项目中。但我仍然无法从radiobutton列表访问基于任务的操作(已禁用) 那么,有什么方法可以在服务客户端中生成基于任务的异步操作呢?我以前没有使用过Xamar

我目前正在构建一个基于Xamarin的移动应用程序。对于该项目,我已经使用Framework4.5创建了一个PCL项目。我使用VS2013作为开发IDE。现在我想向这个PCL添加一个WCF服务引用。在向这个PCL项目添加服务引用时,我注意到异步操作的生成被禁用。请查看图片了解更多详细信息

我通过Nuget将BCL.Async包添加到项目中。但我仍然无法从radiobutton列表访问基于任务的操作(已禁用)


那么,有什么方法可以在服务客户端中生成基于任务的异步操作呢?

我以前没有使用过Xamarin,但我假设它实际上支持APM和任务,这只是Visual Studio的一个限制。尝试使用手动生成代码。这是添加服务引用时VisualStudio调用的工具


您需要通过
/parameters
开关传递
newAsync
(任务)或
oldaync
(APM)。

不愿意将其中断,但无法在Xamarin中生成基于任务的WCF客户端。原因是Xamarin或Mono实现了Silverlight集,这是一个有限的WCF实现。因此,您需要改用SLSVCUTIL.exe(在Xamarin中添加服务引用将使用此工具)。SLSVCUTIL生成的silverlight WCF客户端将仅基于异步

一切都没有失去!您可以使用task.fromsync方法轻松地将silverlight异步客户端包装成基于任务的客户端

从Xamarin网站获取的样本:

public async Task<List<TodoItem>> RefreshDataAsync ()
{
  ...
  var todoItems = await Task.Factory.FromAsync <ObservableCollection<TodoWCFService.TodoItem>> (
    todoService.BeginGetTodoItems,
    todoService.EndGetTodoItems,
    null,
    TaskCreationOptions.None);

  foreach (var item in todoItems) {
    Items.Add (FromWCFServiceTodoItem (item));
  }
  ...
}
公共异步任务RefreshDataAsync()
{
...
var todoItems=wait Task.Factory.fromsync(
todoService.BeginGetTodoItems,
todoService.EndGetToItems,
无效的
任务创建选项。无);
foreach(todoItems中的var项){
添加(来自WCFServiceToDoItem(项目));
}
...
}


现在,如果有人能够在包装任务时找出如何捕获错误异常,那就太棒了

我也有同样的问题。我在某个地方读到,在项目属性中禁用wp8目标可能会启用该选项。但这对我不起作用。