C# 取消/中止任务
请看下面的代码C# 取消/中止任务,c#,multithreading,network-programming,task,C#,Multithreading,Network Programming,Task,请看下面的代码 List<Task> tasks = new List<Task>(); static void Main(string[] args) { while (true) { Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp); serverSocket.Bind(new IPEndPoint(IPAddress.A
List<Task> tasks = new List<Task>();
static void Main(string[] args)
{
while (true)
{
Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(IPAddress.Any, Helper.PORT));
serverSocket.Listen(0);
while(true)
{
Socket clientSocket = serverSocket.Accept();
Client client = new Client(clientSocket);
Task t = new Task(delegate { client.Handle(); });
t.Start();
tasks.Add(t);
}
}
Client.Handle():
while (true)
{
byte[] buffer = new byte[1024];
clientSocket.Recieve(buffer);
//Do Something...
}
List tasks=newlist();
静态void Main(字符串[]参数)
{
while(true)
{
Socket serverSocket=新套接字(SocketType.Stream,ProtocolType.Tcp);
Bind(新的IPEndPoint(IPAddress.Any,Helper.PORT));
serverSocket.Listen(0);
while(true)
{
Socket clientSocket=serverSocket.Accept();
客户端=新客户端(clientSocket);
Task t=新任务(委托{client.Handle();});
t、 Start();
任务。添加(t);
}
}
Client.Handle():
while(true)
{
字节[]缓冲区=新字节[1024];
clientSocket.receive(缓冲区);
//做点什么。。。
}
当列表中有10个以上的任务时,有没有办法取消/中止该任务?如果要取消c#中的任务,您必须添加一个
取消令牌源
,您可以调用它来取消该任务
它看起来像是一个
CancellationTokenSource cts=新的CancellationTokenSource();
Task t=新任务(()=>TaskRun(),cts.Token);
t、 Start();
cts.Cancel();
在您的示例中,大致如下所示:
但是我不太理解你的代码。你有多个无限循环,包括另一个循环中的无限循环。一旦你的代码到达Socket clientSocket…
的部分,它将永远不会离开该循环。此外,取消列表中的所有任务将不会删除这些任务,你最终会退出n内存不足
如果您只希望完成10项任务,那么最好使用设置好的任务数组,如task[]tasks=newtask[10]
然后在填充数组时,退出内部循环--这也允许您使用for/foreach循环。非常感谢您的帮助。外部循环侦听传入的连接,内部循环处理这些连接。
// ...
CancellationTokenSource cts = new CancellationTokenSource();
while(true)
{
Socket clientSocket = serverSocket.Accept();
Client client = new Client(clientSocket);
Task t = new Task(() => client.Handle(), cts.Token);
t.Start();
tasks.Add(t);
if(tasks.Count() >= 10) cts.Cancel();
}
// ...