相关疑难解决方法(0)

取消任务正在抛出异常

从我读到的有关任务的内容来看,以下代码应该取消当前正在执行的任务而不会抛出异常.我的印象是,任务取消的重点是礼貌地"要求"任务停止而不中止线程.

以下程序的输出是:

倾倒异常

[OperationCanceledException]

取消并返回最后计算的素数.

我试图在取消时避免任何例外.我怎么能做到这一点?

void Main()
{
    var cancellationToken = new CancellationTokenSource();

    var task = new Task<int>(() => {
        return CalculatePrime(cancellationToken.Token, 10000);
    }, cancellationToken.Token);

    try
    {
        task.Start();
        Thread.Sleep(100);
        cancellationToken.Cancel();
        task.Wait(cancellationToken.Token);         
    }
    catch (Exception e)
    {
        Console.WriteLine("Dumping exception");
        e.Dump();
    }
}

int CalculatePrime(CancellationToken cancelToken, object digits)
{  
    int factor; 
    int lastPrime = 0;

    int c = (int)digits;

    for (int num = 2; num < c; num++)
    { 
        bool isprime = true;
        factor = 0; 

        if (cancelToken.IsCancellationRequested)
        {
            Console.WriteLine ("Cancelling …
Run Code Online (Sandbox Code Playgroud)

c# multithreading c#-4.0

55
推荐指数
4
解决办法
6万
查看次数

级联线程查杀

对于时间/日期驱动的线程应用程序,我正在使用创建new Thread()的线程(并且线程都被放入列表中),其中调用一个运行未定义时间的方法(可以是1秒甚至是一整天) .在此方法中,可以创建新的(子)线程(也可以new Thread()).

现在,当应用程序的线程部分结束时(手动或因为程序结束),我将浏览我创建的线程列表并手动结束.

现在据我所知,创建子线程的线程的结束(因此创建第二个线程的方法的线程)并不意味着子线程的结束.所以我的问题是:是否有任何好的方法来管理它,线程杀死会对其子级进行级联(或者我误解了线程在那里的工作方式?).

编辑:有问题:这里提到的所有线程都是后台线程(因此后台进程创建一个子进程进程,该进程将在父进程结束时结束).

c# multithreading winforms

2
推荐指数
1
解决办法
276
查看次数

标签 统计

c# ×2

multithreading ×2

c#-4.0 ×1

winforms ×1