为wcf Async创建任务,不等待

时间:2014-02-17 00:27:46

标签: c# wcf asynchronous task async-await

基本上,当我的autocompletetextbox更改文本时,它会从WCF服务(带照片)更新,问题是:

Task taskA = new Task(() => listanomes.queryAsync(argumentos, 2, 3, query));

任务一启动就没有启动,所以我需要的列表是空的。

private async void tbA_destinatario_TextChanged(object sender, RoutedEventArgs e)
{
    await buscaAC();
    await fotos();
    int i = 0;
    foreach (Pessoa temp in listaPessoas)
    {
        if (listaimgs.Count == 0)
            break;
        temp.Imagem = listaimgs[i];
        i++;
        listaPessoas[i] = temp;
    }
    tbA_destinatario.ItemsSource = listaPessoas;
}

private async Task buscaAC()
{
    ServicosLinkedIN.ServicosClient listanomes = new ServicosLinkedIN.ServicosClient();
    string query = "select nome,id_user, foto from tbl_conexoes, tbl_users where((tbl_conexoes.id_con2 = @var1 AND id_con1 = id_user) OR (tbl_conexoes.id_con1 = @var1 AND id_con2 = id_user)) AND upper(nome) LIKE upper(@var2)  ORDER BY nome LIMIT 0, 5";
    List<string> argumentos = new List<string>();
    argumentos.Add(Convert.ToString(id));
    argumentos.Add("%" + tbA_destinatario.Text + "%");

    //listanomes.listautilizadoresAsync(id, tbA_destinatario.Text);
    listanomes.queryCompleted += listanomesautocomplete;
    Task taskA = new Task(() => listanomes.queryAsync(argumentos, 2, 3, query));
    taskA.Start();
    await taskA;
}

private async Task fotos()
{
    ServicosLinkedIN.ServicosClient dlfotos = new ServicosLinkedIN.ServicosClient();

    dlfotos.listadlFotoCompleted += dlfotos_listadlFotoCompleted;
    Task taskA = new Task(() => dlfotos.listadlFotoAsync(nomeimgs));
    taskA.Start();

    await taskA;
}

2 个答案:

答案 0 :(得分:0)

我认为你必须等待你在代表中调用的任务。例如:

Task taskA = new Task( async () => await listanomes.queryAsync(argumentos, 2, 3, query));

但我真的没有找到你创建单独任务的原因。你可以使用:

await listanomes.queryAsync(argumentos, 2, 3, query);

而不是创建taskA,启动它并等待它。

答案 1 :(得分:0)

如果不尝试进一步分析代码,这肯定是个问题:

Task taskA = new Task(() => listanomes.queryAsync(argumentos, 2, 3, query));

你在这里做了点火。当您开始任务时,它将立即完成,而queryAsync将在后台继续执行。

您应该在不使用Task构造函数的情况下重写代码。我确信这是可能的。

相关问题