C# 每个任务依赖于某些事件时的任务链接

C# 每个任务依赖于某些事件时的任务链接,c#,events,task,C#,Events,Task,我需要连接到服务器并收集数据进行处理 下面是连接的方法 private readonly ServerComLibrary _vMyServer;// this is initialised in constructor public ConnectToServer(string servername) { _vMyServer.connectToServerByName("ssl",servername); } \u vMyServer具有以下事件 OnConnect成功-我将收

我需要连接到
服务器
并收集数据进行处理

下面是连接的
方法

private readonly ServerComLibrary _vMyServer;// this is initialised in constructor 

public ConnectToServer(string servername)
{
  _vMyServer.connectToServerByName("ssl",servername);

}
\u vMyServer
具有以下事件

  • OnConnect成功-我将收集数据并将其复制到excel文件
  • OnConnectionFailed-只需记录异常
下面是一个连接成功事件

private void Handle_OnConnectSucceeded()
{
     //collect data and create excel 
}
这是一个失败的事件

private void Handle_OnConnectFailed(int hr)
{
     //log exception
}
一切正常

但是,现在我的要求是逐个连接到多个服务器

List<Server> servers = ConfigurationManager.GetSection("servers") as List<Server>;
var datacollectionTasks = new List<Task>();
foreach (var server in servers)
{
   var data = Task.Run(() => ConnectToServer(server.serveraddress));
   datacollectionTasks.Add(dataFix);
}
await Task.WhenAll(datacollectionTasks);
List servers=ConfigurationManager.GetSection(“服务器”)作为列表;
var datacollectionTasks=新列表();
foreach(服务器中的var服务器)
{
var data=Task.Run(()=>ConnectToServer(server.serveraddress));
datacollectionTasks.Add(dataFix);
}
等待任务.WhenAll(数据收集任务);
只有在连接到服务器并创建excel生成完成或连接失败后,我才想启动
第二个任务

我怎么做?我可以使用
ContinueWith
,但不确定如何确认是否触发事件并完成作业

我的要求是逐个连接到多个服务器

List<Server> servers = ConfigurationManager.GetSection("servers") as List<Server>;
var datacollectionTasks = new List<Task>();
foreach (var server in servers)
{
   var data = Task.Run(() => ConnectToServer(server.serveraddress));
   datacollectionTasks.Add(dataFix);
}
await Task.WhenAll(datacollectionTasks);
那么我不知道为什么要使用
Task.whalll

我怎么做?我可以使用ContinueWith,但不确定如何确认是否触发事件和作业是否已完成

为了链接任务,您需要一个要链接到的任务。具体而言,通过以下方式将事件更改为
任务


那么,您的意思是,如果OnConnectionSuccessed事件需要5分钟才能成功,或者超时,代码将不会从foreach循环中选择下一项?第二个问题:如何将依赖项传递给扩展类?我想在连接成功和失败事件期间使用logger记录详细信息。这在使用扩展方法时可能是不可能的,或者我认为我们应该尽量避免使用扩展方法,除非它们只处理内部数据。@kudlatiger:1)是的。2) 这听起来像是一个完全不同的问题;在SO上单独问一个问题,而不是在答案上发表评论,你会得到更好的结果。谢谢你的意见。我提出了一个问题。我相信COM引用和静态类可能会导致内存问题
List<Server> servers = ConfigurationManager.GetSection("servers") as List<Server>;
foreach (var server in servers)
{
  await _vMyServer.ConnectAsync("ssl", server.serveraddress);
  // collect data and create excel
}