C#:Task.Run在主线程上执行

Kos*_*ukh 2 c# xamarin.ios task-parallel-library ios async-await

我正在使用monotouch/Xamarin作为iOS应用程序.

Task.Run各州的文件:

将指定的工作排队到ThreadPool上运行并返回该工作的任务句柄.

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

我想做的事情如下:

Task.Run(async () => await PerformTask());
Run Code Online (Sandbox Code Playgroud)

但让它在主线程上运行.通常我会用BeginInvokeOnMainThread如下方式编写它:

BeginInvokeOnMainThread(async () => await PerformTask());
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*rvy 7

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

PerformTask();
Run Code Online (Sandbox Code Playgroud)

你完成了 如果您只想在该任务完成后继续执行该方法的其余部分,那么await它:

await PerformTask();
Run Code Online (Sandbox Code Playgroud)

没有理由Task.Run为你打电话,也没有任何理由创建一个awaits没有特殊原因的方法的lambda (你可以直接调用它,如果你想从线程池线程启动它).