在c#中,当您在异步方法中调用await方法时,代码将从调用上下文执行到该方法。如果我想进行异步调用,直接从同一行代码继续(即使异步操作尚未完成)而不是返回到调用上下文,该怎么办?我怎么能这样做?
答案 0 :(得分:3)
根据定义,await是在继续工作流之前必须异步等待任务完成的点。如果你不必等待,那就不要等了!没有要求你等待任何事情。
你的问题就像问我一样IEnumerable<int>
但是我并不关心整数是什么;我必须foreach
吗?&#34;不,你不是。如果你不关心结果是什么,你就不必从序列中得到结果。如果你不关心任务的结果,你就不必等待它。
但是获取一个序列然后不枚举它是一件奇怪的事情,获得一个任务然后不关心它完成时会发生什么是一件奇怪的事。
答案 1 :(得分:3)
如果我想进行异步调用,直接从相同的代码行继续调用(即使异步操作尚未完成),而不是返回到调用上下文,该怎么办?我怎么能这样做?
最简单的方法,无论Something
是同步还是异步,都能正常工作:
var _ = Task.Run(() => Something());
但是,正如Eric Lippert所说:
获得任务然后不关心完成时会发生什么事情是一件奇怪的事。
或者,正如我喜欢说的那样:“绝错”几乎永远你真正想要的东西。忘了&#34;忘了&#34;的意思是:
在实际代码中,此方案非常罕见。
答案 2 :(得分:0)
如果要启动异步方法并继续执行该功能,可以执行Task<string> getStringTask = asyncMethodThatReturnsString();
之类的操作。然后继续,直到您要等待异步任务完成,此时您将调用string output = await getStringTask;
。