在同步操作上使用async / await(主要是留在UI线程上)

时间:2014-02-20 14:00:28

标签: c# task async-await

我正在尝试异步运行一些东西。这是我的代码:

    private async void SearchButton_Click(object sender, EventArgs e)
    {
         await Search();
    }

    // Inside search there is no async operation
    public Task Search()
    {
        // search for data in DB
        // update DataGridView and other elements on UI

        // How to return null/void/nothing?
        return ???;
    }

等待Search()等同步方法是否违法/不良做法?我知道我可以使用Task.Run(Search)代替,但Search()将在另一个线程上执行(不在UI线程上),我必须经常在Invoke()内使用Search()。< / p>

我将Search()方法的返回值从'void'更改为'Task',所以它等待但是我必须返回什么?

1 个答案:

答案 0 :(得分:10)

  

等待Search()等同步方法是非法/不好的做法吗?

这是一个非常糟糕的主意,因为你的用户界面基本上会挂起。

您应该将Search方法更改为SearchAsync(为了约定)并使用异步数据库操作使其正确异步。

目前,您没有任何真正的异步:一切都将在您的UI线程上发生。