我遵循了以下示例,效果很好。
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
因此,对于您的特定情况,鉴于您已经拥有两个异步方法,我想您需要做的就是如上所示调用它们。