C#:任务。在主线程上运行execute

C#:任务。在主线程上运行execute,c#,ios,xamarin.ios,async-await,task-parallel-library,C#,Ios,Xamarin.ios,Async Await,Task Parallel Library,我在iOS应用程序中使用monotouch/Xamarin 各国的文件: 对要在线程池上运行的指定工作进行排队,并返回任务 负责那项工作 这本质上表明它可以在任何线程ThreadPool上运行 我想做一些类似的事情: Task.Run(async () => await PerformTask()); 但是让它在主线程上运行。通常情况下,我会使用以下方法编写: BeginInvokeOnMainThread(async () => await PerformTask()); 但我

我在iOS应用程序中使用monotouch/Xamarin

各国的文件:

对要在线程池上运行的指定工作进行排队,并返回任务 负责那项工作

这本质上表明它可以在任何线程
ThreadPool
上运行

我想做一些类似的事情:

Task.Run(async () => await PerformTask());
但是让它在主线程上运行。通常情况下,我会使用以下方法编写:

BeginInvokeOnMainThread(async () => await PerformTask());

但我在共享代码中这样做,不想使用特定于iOS的调用。有没有办法告诉Task.Run()调用主线程上的操作?

如果要在当前线程中运行
PerformTask
,而不是线程池线程,只需不调用
Task.Run
。只需使用:

PerformTask();
你完成了。如果只想在该任务完成后继续执行该方法的其余部分,则
wait
it:

await PerformTask();

没有理由调用
任务。在此处为您运行
,也没有理由创建一个lambda,
无特殊原因地等待该方法(如果您想从线程池线程启动它,可以直接调用它)。

查看MainQueue.cs:


它适用于Xamarin表单应用程序。您必须从主线程调用一次Init(),然后才能确保在主线程上执行。

当前正在执行的代码是否在主线程中?@Servy,在我当前的上下文中,可以安全地做出这样的假设。但如果有更一般的答案,我也希望如此。