【发布时间】:2018-02-04 01:18:48
【问题描述】:
我调用了 WCF,方法的 Completed 事件在等待方法之后调用。
public void my_method()
{
Task task = Task.Run(async () => await DoWorkAsync());
task.Wait();
}
public async Task DoWorkAsync()
{
await Task.Run(() =>
{
wcf1.ServiceAnnonces s = new wcf1.ServiceAnnonces();
s.DoWorkCompleted += S_DoWorkCompleted;
s.DoWorkAsync();
});
}
private string retour;
public string Retour { get => retour; set => retour = value; }
private void S_DoWorkCompleted(object sender, wcf1.DoWorkCompletedEventArgs e)
{
Retour = e.Result;
}
我用这段代码调用方法:
Droid.Resources.ISvAnnoncesSoap s = new Droid.Resources.ISvAnnoncesSoap();
s.ma_methode();
LbResulat.Text = s.Retour;
我的服务:
[ServiceContract]
public interface IServiceAnnonces
{
[OperationContract]
string DoWork();
}
public class ServiceAnnonces : IServiceAnnonces
{
public string DoWork()
{
return "coucou";
}
}
}
但是 le Completed 事件是在 LbResulat.Text = s.Retour; 之后抛出的;
感谢您的帮助。
编辑:
我删除了一些行代码。我现在的代码:
public void ma_methode()
{
wcf1.ServiceAnnonces s = new wcf1.ServiceAnnonces();
s.DoWorkCompleted += S_DoWorkCompleted;
s.DoWorkAsync();
}
private string retour;
public string Retour { get => retour; set => retour = value; }
private void S_DoWorkCompleted(object sender, wcf1.DoWorkCompletedEventArgs e)
{
Retour = e.Result;
}
直接调用:
Droid.Resources.ISvAnnoncesSoap s = new Droid.Resources.ISvAnnoncesSoap();
s.ma_methode();
LbResulat.Text = s.Retour;
但是一样,但是 Completed 事件是在 LbResulat.Text = s.Retour 之后抛出的;所以我的 Retour 是空的。
【问题讨论】:
-
猜测,
s.DoWorkAsync()也是异步的,应该等待。我很确定你不需要所有这些Task.Run's虽然 - async doesn't need Threads 你能提供代码或ServiceAnnonces.DoWorkAsync();的方法签名 -
感谢我编辑我的帖子
标签: wcf asynchronous async-await