Xamarin.ios 使用 await 运行 WCF 服务函数



我遵循了以下示例,效果很好。

https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/walkthrough_working_with_WCF/

唯一的问题是,该示例使用按钮单击来加载数据。现在我有两个单独的调用不同的函数,我需要其中一个等待另一个,例如:

因此,例如,当我调用函数 2 时,我想先等待函数 1。

_client.function1Async();
_client.function2Async();

我可以将 function2 调用放在 function1Done 处理程序中,但我希望对它使用异步等待。当我使用异步任务时,我收到一条错误消息,指出无法等待空白。但是示例中的 Web 服务异步函数是空的

如果我有 6 个我想运行的调用,它会变得非常混乱。

void _client_function1Completed(object sender,UpdateOrdersByWardCompletedEventArgs e
{
}
void _client_function2Completed(object sender,UpdateOrdersByWardCompletedEventArgs e
{
}

希望这是有道理的。

你可以 Task.ContinueWithContinueWith 创建一个在任务 1 完成时异步执行的延续。

var task1 = Task.Factory.StartNew( (( => { func1((; } );

任务任务

任务 2 = 任务 1 。ContinueWith( (i( => { func2((; } );

不确定我是否很好地理解您要实现的目标,但我想您可以尝试这样的事情:

给定一些冗长(和阻塞(的方法:

public void func1()
{
    Console.WriteLine("func1");
    System.Threading.Thread.Sleep(5000);
}
public void func2()
{
    Console.WriteLine("func2");
    System.Threading.Thread.Sleep(5000);
}

您可以通过执行以下操作来添加异步运行冗长内容的功能:

public async Task function1Async()
{
   await Task.Run(() => {
      func1();
   });
}
public async Task function1Async()
{
   await Task.Run(() => {
      func2();
   });
}

现在,您可以选择异步或同步运行"func1"和"func2",例如:

function1Async().Wait();    // will block
function2Async();           // will run asynchronously

因此,对于您的特定情况,鉴于您已经拥有两个异步方法,我想您需要做的就是如上所示调用它们。

最新更新