等待从异步任务方法返回

时间:2015-07-22 10:21:51

标签: c# silverlight asynchronous

我是代码的初学者,我花了几个小时搜索我的问题的解决方案。

我正在使用一个Silverlight应用程序,它可以使用不同的Web服务,我用异步方法调用它们(我别无选择,因为我使用的是Silverlight),目标是等待返回我的方法然后继续执行申请书。

这是我的方法的外观(它们位于名为Services的静态类中):

private static Task<ObservableCollection<Demande_GetNb_Result>> DemandeGetNbAsync()
{
    TaskCompletionSource<ObservableCollection<Demande_GetNb_Result>> tcs = new TaskCompletionSource<ObservableCollection<Demande_GetNb_Result>>();
    ABClient aBClient = new ABClient();
    aBClient.Demande_GetNbCompleted += (sender, e) =>
    {
        if (e.Error != null)
            tcs.TrySetException(e.Error);
        else if (e.Cancelled)
            tcs.TrySetCanceled();
        else
            tcs.TrySetResult(e.Result);
    };

    aBClient.Demande_GetNbAsync(((App)Application.Current).User.IdUser, true, true, true, (int)Constantes.Statut.Is_Waiting);
    return tcs.Task;
}

public static async Task StartFamille()
{
    ListInfos = await DemandeGetNbAsync(); // ListInfos is a Static variable on my Services class
}

我在其他类中调用此方法,如下所示:

var result = Services.StartFamille();

我想等到结果有价值才继续执行,但它不起作用,我找不到我理解的简单解决方案。继续执行而不等待将值分配给结果。

1 个答案:

答案 0 :(得分:2)

您的方法返回Task。尝试添加await运算符。

var result = await Services.StartFamille();

此外,DemandeGetNbAsync方法应返回ObservableCollection<Demande_GetNb_Result>类型的变量,并使用await运算符。