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()(他们没有同步方法,因此不推荐使用此方法)