这是我所拥有的:
多平台 (Xamarin/C#) 应用程序
定义具有特定于平台的实现的方法(针对 UI 任务)的接口(interface)
在一个平台上,实现需要等待一些异步调用,而在另一个平台上则不需要
我的实现:
接口(interface)将方法定义为:Task DoSomething()
在实现必须等待异步调用的平台上
该方法的实现为:
async Task DoSomething()
{
// code
await // async();
// code
}
效果很好
在实现不调用其他异步方法的平台上,我有 2 个选项:
将该方法定义为async Task DoSomething(),并收到编译时警告“此异步方法缺少 'await' 运算符,将同步运行...”
里>将方法定义为返回 Task.Run(() => {/这里是主要逻辑/}) 的 Task DoSomething() ,但是当我调用await DoSomething() - 主要逻辑在另一个线程上执行,我不希望发生这种情况。通过(1)中的实现,调用await DoSomething保持在同一个线程上。
如何解决此问题 - 返回一个非异步且保留在同一线程/上下文上的可等待任务?
最佳答案
您应该使用return Task.FromResult(returnValueHere)
。它会稍微快一些并且会保持在同一个线程中。并且不要忘记从方法声明中删除async
。
如果您的方法没有返回任何内容,您也可以简单地使用return Task.FromResult(0)
。
public Task DoSomething()
{
// Work done here
return Task.FromResult(0);
}
关于时间:2019-03-07 标签:c#awaitabletask留在相同的上下文中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498763/