c#在相同的背景下等待任务

c#在相同的背景下等待任务,c#,multithreading,asynchronous,async-await,task,C#,Multithreading,Asynchronous,Async Await,Task,以下是我所拥有的: 一个多平台(Xamarin/C#)应用程序 定义具有特定于平台的实现的方法(用于UI任务)的接口 在一个平台上,实现需要等待一些异步调用,而在另一个平台上,则不需要 我的实施: 接口将方法定义为:Task DoSomething() 在实现必须等待异步调用的平台上 该方法实现为: async Task DoSomething() { // code await // async(); // code } 这很好 在实现不调用其他异步方法的平台上,我有两

以下是我所拥有的:

  • 一个多平台(Xamarin/C#)应用程序

  • 定义具有特定于平台的实现的方法(用于UI任务)的接口

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

我的实施:

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

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

该方法实现为:

async Task DoSomething()
{
  // code
  await // async();
  // code
}
这很好

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

  • 将该方法定义为异步任务DoSomething(),并获得编译时警告“此异步方法缺少'await'运算符,将同步运行…”

  • 将方法定义为Task DoSomething(),该方法返回Task.Run(()=>{/main logic here/}),但是当我调用wait DoSomething()时-主逻辑在另一个线程上执行,我不希望发生这种情况。在(1)中的实现中,调用wait DoSomething保持在同一线程上


如何解决此问题?返回一个非异步的等待任务,并保持在同一线程/上下文中?

您应该使用
返回任务。FromResult(returnValueHere)
。它将稍微快一点,并将保持在同一线程中。不要忘记从方法声明中删除
async

如果您的方法不返回任何内容,您也可以简单地使用
返回Task.FromResult(0)

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