Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6062801
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T09:05:35+00:00 2026-05-23T09:05:35+00:00

I’m trying to find a way to schedule Tasks to run in sequence. The

  • 0

I’m trying to find a way to schedule Tasks to run in sequence. The solution I came up so far with is posted below, but I have a suspicion that it can be done in a much easier / more efficient way.

public class SequentialTaskRunner
{
    private ISet<Task> runningTasks = new HashSet<Task>();

    public void Run(Task task)
    {
        lock (runningTasks)
        {
            var tasksToAwait = runningTasks.ToArray();

            // create a task that waits for the currently running tasks
            var waitingTask = Task.Factory.StartNew(() =>
            {
                Task.WaitAll(tasksToAwait);
            });

            // make sure the task gets removed from the running tasks on completion
            task.ContinueWith((antecedent2) =>
            {
                lock (runningTasks)
                {
                    runningTasks.Remove(task);
                }
            });

            // prepend the waiting task 
            waitingTask.ContinueWith((antecedent) => task.Start());

            runningTasks.Add(task);
        }
    }
}

I want to use this for enqueueing tasks dealing with com-port connections, to prevent them from getting in each others way.

The situation is as follows: I’m working with an rfid device. There’s 2 drivers in play. 1 for reading / writing. Another one that can scan the available com ports on request to find an(other) reader. Sometimes, a port scan will be done using the reader driver, to restore a connection. It’s exactly these 2 ‘port scanning’ tasks that I do not want to co-occur.

I hope this clarifies how I got into the situation of wanting 2 tasks not to run at the same time. Now, there may be another way out, avoiding having to answer this question. But I’m still very curious what a good solution would be 🙂

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-23T09:05:36+00:00Added an answer on May 23, 2026 at 9:05 am

    (Entire previous post stricken per comments).

    My new understanding is you have 3 types of tasks.

    1. Reader
    2. Writer
    3. Port Scanner

    You’d like these three to be as parallel as possible, but you’d also like the Reader, if it so chooses to jump into a port-scanning Reconnect, to not do so while a Port Scanner is alive. One way to tackle this situation is with a Semaphore. Semaphores control access to a limited number of resources.

    In your case, you have a limited number (in fact just 1) of resources (“port scanning”) available. In this instance we could elect to use a simpler AutoResetEvent. However, I feel a Semaphore may actually reduce confusion.

    // Only 1 task may port scan at a time
    Semaphore portScanResource = new Semaphore(initialCount: 1, maximumCount: 1);
    
    // ...
    
    // "Reader task"
    var task = Task.Factory.StartNew( () =>
        {
            // ...
            if (shouldPortScan)
            {
                portScanResource.WaitOne();
                try
                {
                    // do your port scan
                }
                finally
                {
                    // we're done
                    portScanResource.Release();
                }
            }
        });
    

    The Port Scanner task would use the same Semaphore, ensuring only 1 thread executes a port scan at a time.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
I have a French site that I want to parse, but am running into
Seemingly simple, but I cannot find anything relevant on the web. What is the
I am trying to loop through a bunch of documents I have to put
I have a .ini file as follows: [playlist] numberofentries=2 File1=http://87.230.82.17:80 Title1=(#1 - 365/1400) Example
I am trying to understand how to use SyndicationItem to display feed which is
Basically, what I'm trying to create is a page of div tags, each has
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I have just tried to save a simple *.rtf file with some websites and
I want to count how many characters a certain string has in PHP, but

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.