是否在 C# 中分别维护两个具有相同名称的任务?
Are two tasks with same name maintained separately in C#?
我的控制台应用程序中有以下代码:
if (Count % 11 >= 5)
{
GrabberTask = GrabberTask.ContinueWit(Grabber.ExtractSources);
}
if 子句位于带有计数器的循环内。我想知道如果 if 在 GrabberTask
第一次开始之前第二次计算为真会发生什么。当 if 条件的计算结果为真时,有没有更好的方法来继续执行相同的任务。我正在从网页中提取图像源并将它们存储在 LinkedList
中。有时我会从两个不同的任务中将重复链接添加到 LinkedList
。如何预防?
每次您提供一个延续,整个延续都会被执行。
您需要实现某种线程同步以避免多个线程针对某些资源执行给定操作。
最简单的是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
}
}
}
现在,如果您在某个时间间隔内执行许多可能需要执行同一件事的延续,一次只能执行一个延续。
我的控制台应用程序中有以下代码:
if (Count % 11 >= 5)
{
GrabberTask = GrabberTask.ContinueWit(Grabber.ExtractSources);
}
if 子句位于带有计数器的循环内。我想知道如果 if 在 GrabberTask
第一次开始之前第二次计算为真会发生什么。当 if 条件的计算结果为真时,有没有更好的方法来继续执行相同的任务。我正在从网页中提取图像源并将它们存储在 LinkedList
中。有时我会从两个不同的任务中将重复链接添加到 LinkedList
。如何预防?
每次您提供一个延续,整个延续都会被执行。
您需要实现某种线程同步以避免多个线程针对某些资源执行给定操作。
最简单的是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
}
}
}
现在,如果您在某个时间间隔内执行许多可能需要执行同一件事的延续,一次只能执行一个延续。