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

Alm*_*ato 0 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 ???;
    }
Run Code Online (Sandbox Code Playgroud)

等待同步方法是非法/不良做法Search()吗?我知道我可以使用Task.Run(Search)而不是然后Search()将在另一个线程(不是在UI线程)上执行,我必须经常Invoke()在里面使用Search().

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

Jon*_*eet 10

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

嗯,这是一个非常糟糕的主意,因为你的UI基本上会挂起.

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

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