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中使用此代码?