C# 等待包含任务的函数完成,然后继续

C# 等待包含任务的函数完成,然后继续,c#,async-await,task,C#,Async Await,Task,如何等到内部有任务的函数完成后再继续 public void A() { Debug.Log("before") CopyInfoFromDB(); Debug.Log("after") } public void CopyInfoFromDB() { FirebaseDatabase.DefaultInstance.GetReference(path) .GetValueAsync().ContinueWith(task =>

如何等到内部有任务的函数完成后再继续

public void A()
{
    Debug.Log("before")
    CopyInfoFromDB();
    Debug.Log("after") 
}

public void CopyInfoFromDB()
{
    FirebaseDatabase.DefaultInstance.GetReference(path)
             .GetValueAsync().ContinueWith(task =>
             {
                 if (task.IsFaulted)
                 {
                     Debug.Log("failed");

                 }
            name = ...// loading local varibles from Task.result
            });
}

我想让它等待
CopyInfoFromDB
完成,然后再打印“after”。我应该如何编写一个不同的函数呢?

如果您打算使用async await,那么请准备好让管道中涉及的所有方法都是异步的

public async Task A()
{
    Debug.Log("before")
    await CopyInfoFromDB();
    Debug.Log("after") 
}

public Task CopyInfoFromDB()
{
      return FirebaseDatabase.DefaultInstance
                             .GetReference(path)
                             .GetValueAsync();
}

如果
GetValueAsync
失败,异常将在您等待它的行上抛出。

CopyInfoFromDB
返回
任务,而不是void,并在
a
中标记
a
异步等待它,而不是作为专家:我看到两件事:您所谓的函数不是一个函数-看起来,有一个异步线程正在运行。我建议使用一个函数,等待返回值,并有一个帮助变量,在异步函数准备好时填充。我不明白“所谓函数”是什么意思example@JSteward谢谢你的回答,我如何在不返回任务的情况下解决它?CopyInfoFromDB()中有更多代码-我处理该函数中的task.result,因此在加载变量之前我无法返回该任务,我不需要该任务返回函数a您不应该使用
task.result
这是一个阻塞调用,可能会死锁,请等待呼叫,这样您就可以返回
任务
。谢谢您的回答,我如何在不返回任务的情况下解决它?CopyInfoFromDB()中有更多代码-我在该函数中处理task.result,因此在加载变量之前无法返回任务,我不需要任务返回函数A@SHAI,不要使用异步方法,我假设您使用的库具有相应的同步方法
FirebaseDatabase.DefaultInstance.GetReference(路径).GetValue()
。如果您不打算在软件中开始使用异步方法,那么请继续使用同步方法。在同步代码库中使用异步方法不会带来任何好处。我必须使用此代码连接Firebase数据库,因此它必须是GetValueAsync()(他们没有同步方法,因此不推荐使用此方法)