为了账号安全,请及时绑定邮箱和手机立即绑定

如何在线程或任务中进行异步操作

如何在线程或任务中进行异步操作

C#
冉冉说 2023-08-13 16:00:19
我需要做一些需要异步的操作(比如向数据库写入一些内容,同时从中读取一些内容,反序列化我从中读取的内容,对这些数据执行某些操作...等等),但我需要要么在线程上执行此操作,要么在任务上执行此操作,以便我可以在执行期间执行其他操作。此外,如果可以喜欢,总是一方面读取数据库,另一方面在其中写入数据,那就太好了,我很确定这是可能的,但我不确定如何实现它,以及使用什么库/工具/功能...等我正在开发控制台应用程序我尝试了一些东西,例如带有一些等待的异步方法,但我不太了解所有这些之间的执行顺序,问题还在于我不太了解 / 关键字以及如何工作,但async我await尝试Task了少量。我正在研究的实际上是 2 Task.Run,一个在数据库方法中写入数据,另一个Task.Run读取数据库,问题是在这两个方法中,我都有函数async,然后,需要等待它们某处,因此也需要等待对写入数据或读取数据的调用,但我不知道如何制作Task.Run asyncstatic async Task Main(string[]args){// Those two tasks need to run at the same time    Task.Run(() =>    {        // Need to be awaited        var writer = WritingDatabase();    }    Task.Run(() =>    {        // Need to be awaited as well        var reader = ReadingDatabase();    }}public async Task<List<Code>> ReadingDatabase(){      List<Code> listCode = new List<Code>();      // Some code      listCode.Add(await database.ReceiveMessageAsync());      return listCode;}上面的代码是一个示例,其中可能存在一些错误,但我的代码的功能是存在的
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

通常这就是等待所有任务异步完成的方式:

await Task.WhenAll(myArrayOfTasks);

要在内部等待,Task.Run只需传递异步委托(一些读取):

Task.Run(async () =>
{    await Task.Delay(1000);
});

另外,了解为什么在实践中要避免Task.Run:Task.Run Etiquette 和正确用法以及更多示例也会很有帮助。简而言之,您不应该用 包装阻塞 APITask.Run,这是没有意义的,因为底层线程无论如何都会被阻塞。对于非阻塞 API 来说,一个好的设计是 return Task,因此您无论如何都不需要运行新的 API。


查看完整回答
反对 回复 2023-08-13
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

你需要这样做:


static async Task Main(string[] args)

{

    var tasks = new[]

    {

        Task.Run(() =>

        {

            // Need to be awaited

            var writer = WritingDatabase();

        }),


        Task.Run(() =>

        {

            // Need to be awaited as well

            var reader = ReadingDatabase();

        })

    };


    await Task.WhenAll(tasks);

}


查看完整回答
反对 回复 2023-08-13
?
侃侃无极

TA贡献2051条经验 获得超10个赞

由于您已经拥有Task返回 API,因此您可以执行以下操作:


static async Task Main(string[]args)

{

    await Task.WhenAll(WritingDatabase, ReadingDatabase);

}


查看完整回答
反对 回复 2023-08-13
  • 3 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信