写法一:

public class MainViewModel
{
    private readonly TaskScheduler _backgroundTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext();

    public void StartConcurrentTask()
    {
        Task.Factory.StartNew(() =>
        {
            // 执行耗时操作
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Concurrent Task: " + i);
                Thread.Sleep(1000);
            }
        }, CancellationToken.None, TaskCreationOptions.None, _backgroundTaskScheduler);
    }
}

 

写法二:

  public static async Task SunAsync()
        {
            var t = Task.Run(()=>{
                    System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId}  New Task~");
                    for(int i=0 ; i<10; i++)
                    {
                        Thread.Sleep(1000);
                        System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId}  I am playing game...");                    
                    }
                });
            System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId}  After Task, before await.");
            Thread.Sleep(15000); //主线程睡15秒
            await t;
            System.Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId}  After await, before SunAsync() exit.");
        }