Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套异步/等待_C#_Asp.net_Asynchronous_Async Await - Fatal编程技术网

C# 嵌套异步/等待

C# 嵌套异步/等待,c#,asp.net,asynchronous,async-await,C#,Asp.net,Asynchronous,Async Await,如下所示,使用异步/等待函数同时运行任务的最佳方式是什么: private async void ProcessItem() { while (true) { await this.FetchDeviceData(); //Read From Devices await Task.Delay(2000); //300000 await this.Process(); //Insert Into DataBase } }

如下所示,使用异步/等待函数同时运行任务的最佳方式是什么:

private async void ProcessItem()
{
    while (true)
    {
        await this.FetchDeviceData(); //Read From Devices
        await Task.Delay(2000);   //300000
        await this.Process(); //Insert Into DataBase
    }
}

private async Task FetchDeviceData()
{
    await Task.Run(() =>
    {
        //Read From all Devices;
    }
} 

private async Task Process()
{
    if (!(await RDataBase.ProcessItem(Mem,Date)))
    //Update Record;
}

public static async Task<bool> ProcessItem(int Memb, int Date)
{
    return await Task.Run(() =>
    {
        try
        {
            //Array List = Read Device Info From DataBase
            return True;
        }
        catch
        {
            return false;
        }
    });
}
private异步void ProcessItem()
{
while(true)
{
等待此消息。FetchDeviceData();//从设备读取
等待任务。延迟(2000);//300000
等待此操作。Process();//插入数据库
}
}
私有异步任务FetchDeviceData()
{
等待任务。运行(()=>
{
//从所有设备读取数据;
}
} 
专用异步任务进程()
{
if(!(等待RDataBase.ProcessItem(Mem,Date)))
//更新记录;
}
公共静态异步任务ProcessItem(int Memb,int Date)
{
返回等待任务。运行(()=>
{
尝试
{
//数组列表=从数据库读取设备信息
返回True;
}
抓住
{
返回false;
}
});
}

据我所知,您希望以某种顺序处理任务。请查看如果您希望同时执行所有三个操作,则应使用Task.whalll

var task1 = this.FetchDeviceData(); //Read From Devices
var task2 = Task.Delay(2000);   //300000
var task3 = this.Process(); //Insert Into DataBase
await Task.WhenAll(new Task[]{task1,task2,task3 });

有关更多详细信息,请参阅帖子。

您能更清楚地说明您的问题吗?我可以从您的代码推断,
Delay
应该在
FecthDeviceData
完成其工作后运行,
进程
延迟后运行。这是真的吗?如果是,我不明白您的问题。Thanks@Christos任务应该将同时运行公共静态异步任务ProcessItem(int Memb,int Date){return wait Task.run(()=>{try{return True;}catch{return false;}}});}我不明白你为什么要获取数据,执行任意延迟,并同时将数据插入数据库,特别是当你在数据库中插入的数据与你正在获取的数据相关时。但是,不管怎样。你要求它,你得到了它。请参阅标记的重复。谢谢,但作为参考,我使用wait/async函数I编写了我的代码根据以上更改了我的代码,当Task.whalll完成时?是否在While中使用此代码?