C# 正确编写异步方法

C# 正确编写异步方法,c#,asynchronous,methods,async-await,task-parallel-library,C#,Asynchronous,Methods,Async Await,Task Parallel Library,我已经使用异步方法很长时间了,但我不知道如何编写自己的异步方法。正如我所理解的,第一个根(我指的是最深的)异步方法是从任务中包装的同步方法开始的?我说得对吗?编写这种方法的正确模式是什么?现在我是这样做的: private async Task DoSomethingAsync() { var tsk = new Task(OnDo); tsk.Start(); await tsk.ConfigureAwait(false); } private void OnDo()

我已经使用异步方法很长时间了,但我不知道如何编写自己的异步方法。正如我所理解的,第一个根(我指的是最深的)异步方法是从任务中包装的同步方法开始的?我说得对吗?编写这种方法的正确模式是什么?现在我是这样做的:

private async Task DoSomethingAsync()
{
    var tsk = new Task(OnDo);
    tsk.Start();
    await tsk.ConfigureAwait(false);
}

private void OnDo()
{
    // Do stuff ...
}

实际答案太长,无法在此发布

简短回答 不,您不应该从同步方法调用异步方法。方法树应该是自下而上异步的

例如:使用ASP.NET MVC异步方法将从异步操作方法调用,请参阅:

不管怎样,问题都太广泛了

  • 你的“待实施”方法是什么
  • 为什么希望它是异步的
  • 您使用的是什么环境

通常,异步用于I/O操作(数据库、网络、文件读/写)或并行。

如果“根”方法是同步的,则它是同步的。不要通过在另一个线程上运行来假装异步。有关更多详细信息,请参阅。一个好的答案应该是页长。我认为你需要阅读一些基本教程。@CharlesMager,一篇很好的文章,解释了很多。谢谢。也许我的回答能给你一些启示。
public async Task<ActionResult> GizmosAsync()
{
    ViewBag.SyncOrAsync = "Asynchronous";
    var gizmoService = new GizmoService();
    return View("Gizmos", await gizmoService.GetGizmosAsync());
}
private async void button1_Click(object sender, RoutedEventArgs e)
{
    textBlock1.Text = "Click Started";
    await DoWork();
    textBlock2.Text = "Click Finished";
}