如何使异步调用在被调用时立即执行

本文关键字:调用 执行 何使 异步 | 更新日期: 2023-09-27 18:12:30

我在WebMethod的帮助下分配值时遇到了问题。我有一个方法,从我调用WebMethod:

................
svc.GetNameCompleted += GetUserName;
svc.GetNameAsync(ordercode);
string name = MyName;
................

问题是首先执行第三行(string name = MyName;),然后执行GetUserName()方法。

GetUserName()方法中,我为MyName变量赋值,但由于这是在(string name=MyName)之后调用的,所以我第一次执行项目时,我得到了string name = null;,因为MyName变量是null

如何使异步调用在被调用时立即执行

Async方法应该返回一个Task,这样你就可以等待它的完成:

svc.GetNameCompleted += GetUserName;
Task<string> nameTask = svc.GetNameAsync(ordercode);
...
string name = await nameTask;

据我所知,你不能。Silverlight中所有的web服务调用都是异步的。您不能同步调用异步方法。你应该以异步的方式捕获结果,并在方法完成执行后告诉Silverlight如何处理它。

我认为你应该为你的web方法写一个EventHandler,以便管理方法的完成和处理结果

你应该只设置name一旦你有了名字,这将发生在你已经定义为GetUserName的方法(不是一个伟大的名字为GetNameCompleted处理程序虽然,所以我已经重命名它在下一个例子)

public void SomeMethod()
{
  svc.GetNameCompleted += GetUserNameCompleted;
  svc.GetNameAsync(ordercode);
}
public void GetUserNameCompleted(whatever the signature is)
{
  string name = MyName;
}