gpt4 book ai didi

c# - 使用外部事件打破 while 循环

转载 作者:太空狗 更新时间:2023-10-29 18:18:48 24 4
gpt4 key购买 nike

我在 Windows 服务中有一个 while 循环,该循环运行了 x 次,并在从某个文件中读取它们后发起了 x 个电话调用。现在,如果我想制作一个用户界面,它提供了一个选项来停止电话调用,即甚至在它完成之前就打破 while 循环。我该怎么做?

假设我有一个函数。

DialCalls(x)
{
for(int i= 0 ; i<x ; i++)
{
// Initiate call
}
}

在不同的线程中可以同时运行 2,3 个 DialCalls 函数,因为我也在应用程序中完成了线程处理。所以基本上什么是打破网页循环的最佳方法。

最佳答案

使用 task取消(.net 4 中的新功能):

[Fact]
public void StartAndCancel()
{
var cancellationTokenSource = new CancellationTokenSource();
var token = cancellationTokenSource.Token;
var tasks = Enumerable.Repeat(0, 2)
.Select(i => Task.Run(() => Dial(token), token))
.ToArray(); // start dialing on two threads
Thread.Sleep(200); // give the tasks time to start
cancellationTokenSource.Cancel();
Assert.Throws<AggregateException>(() => Task.WaitAll(tasks));
Assert.True(tasks.All(t => t.Status == TaskStatus.Canceled));
}

public void Dial(CancellationToken token)
{
while (true)
{
token.ThrowIfCancellationRequested();
Console.WriteLine("Called from thread {0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(50);
}
}

http://blogs.msdn.com/b/csharpfaq/archive/2010/07/19/parallel-programming-task-cancellation.aspx该任务吞下了异常,因此需要进行一些清理,也许是 IDisposable? About task exceptions

关于c# - 使用外部事件打破 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com