c#可等待任务保持在相同的上下文中
本文关键字:上下文 等待 任务 | 更新日期: 2023-09-27 18:17:13
我有:
-
多平台(Xamarin/c#)应用程序
-
一个接口,它定义了一个方法(用于UI任务),该方法具有特定于平台的实现
-
在一个平台上的实现需要等待一些异步调用,在另一个平台上-它不
接口将方法定义为:Task DoSomething()
在平台上实现必须等待异步调用
方法实现如下:
async Task DoSomething()
{
// code
await // async();
// code
}
运行良好
在实现不调用其他异步方法的平台上,我有2个选项:
将方法定义为async Task DoSomething()并获得编译时警告"此async方法缺少'await'操作符并且将同步运行…"
将方法定义为Task DoSomething()返回Task. run (() => {/这里的主逻辑/}),但是当我调用await DoSomething() -主逻辑在另一个线程上执行,这是我不想发生的。在(1)的实现中,调用await DoSomething保持在同一个线程上。
我如何解决这个问题-返回一个可等待的任务,不是异步的,停留在同一线程/上下文中?
您应该使用return Task.FromResult(returnValueHere)
。它会稍微快一点,并且会保持在同一个线程中。不要忘记从方法声明中删除async
。
如果你的方法没有返回任何结果,你也可以简单地使用return Task.FromResult(0)
。
public Task DoSomething()
{
// Work done here
return Task.FromResult(0);
}