如何使异步调用在被调用时立即执行
本文关键字:调用 执行 何使 异步 | 更新日期: 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;
}