在 C# 中单独维护两个同名的任务

本文关键字:两个 任务 单独 维护 | 更新日期: 2023-09-27 18:30:38

我的控制台应用程序中有以下代码:

if (Count % 11 >= 5)
{
    GrabberTask = GrabberTask.ContinueWit(Grabber.ExtractSources);
}

if 子句位于带有计数器的循环内。我想知道如果在GrabberTask第一次开始之前第二次计算 if 为 true,会发生什么。当 if 条件计算结果为 true 时,有没有更好的方法可以继续执行相同的任务。我正在从网页中提取图像源并将它们存储在LinkedList中。有时我会收到从两个不同的任务添加到LinkedList的重复链接。如何预防?

在 C# 中单独维护两个同名的任务

每次提供延续时,将执行整个延续。

您需要的是实现某种线程同步,以避免多个线程对某些资源执行给定操作。

最简单的一个是lock语句:

public class Test
{
    private static readonly object _syncLock = new object();
    public void MyMethod() 
    {
         lock(_syncLock)
         {
            // No more than a thread will be able to work within this
            // protected code block. Others will be awaiting/blocked until
            // the thread that acquired the lock leaves this code block
         }
    }
}

现在,如果您在某个时间间隔内执行许多可能需要执行相同操作的延续,则一次只能执行一个延续。