c#可等待任务保持在相同的上下文中

本文关键字:上下文 等待 任务 | 更新日期: 2023-09-27 18:17:13

我有:

  • 多平台(Xamarin/c#)应用程序

  • 一个接口,它定义了一个方法(用于UI任务),该方法具有特定于平台的实现

  • 在一个平台上的实现需要等待一些异步调用,在另一个平台上-它不

我实现:

  • 接口将方法定义为:Task DoSomething()

  • 在平台上实现必须等待异步调用

方法实现如下:

async Task DoSomething()
{
  // code
  await // async();
  // code
}

运行良好

  • 在实现不调用其他异步方法的平台上,我有2个选项:

    1. 将方法定义为async Task DoSomething()并获得编译时警告"此async方法缺少'await'操作符并且将同步运行…"

    2. 将方法定义为Task DoSomething()返回Task. run (() => {/这里的主逻辑/}),但是当我调用await DoSomething() -主逻辑在另一个线程上执行,这是我不想发生的。在(1)的实现中,调用await DoSomething保持在同一个线程上。

我如何解决这个问题-返回一个可等待的任务,不是异步的,停留在同一线程/上下文中?

c#可等待任务保持在相同的上下文中

您应该使用return Task.FromResult(returnValueHere)。它会稍微快一点,并且会保持在同一个线程中。不要忘记从方法声明中删除async

如果你的方法没有返回任何结果,你也可以简单地使用return Task.FromResult(0)

public Task DoSomething()
{
    // Work done here
    return Task.FromResult(0);
}