Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. The Criminal Enterprises
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

      1. Blood Money
      2. Frontier Pursuits
      3. Find Lobbies & Outlaws
      4. Help & Support
    3. Crews

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Support

    3. Suggestions

*DO NOT* SHARE MEDIA OR LINKS TO LEAKED COPYRIGHTED MATERIAL. Discussion is allowed.

C# Cancelling an aync task that has a delay


waynieoaks
 Share

Recommended Posts

I know this should be simple, but I am an idiot. 🙂

 

I have an async task that basically delays for 10 seconds to allow you to press Y or N 

 

        public static async System.Threading.Tasks.Task AwaitConfirmation()
        {
 
            try
            {
                AwaitingInput = true;
                Command_Debug("Task started"); //DELETE THIS
                await System.Threading.Tasks.Task.Delay(10000);
                AwaitingInput = false;
                Command_Debug("Task completed"); //DELETE THIS

            }
            catch (OperationCanceledException)
            {
                Command_Debug("Cancel accepted"); //DELETE THIS
                AwaitingInput = false;
            }
        } 

 

I then call this as follows: 
 

System.Threading.Tasks.Task AwaitInput = AwaitConfirmation();

 

The problem is when the person presses a key, the async is still running, and I cannot work out how to issue a cancel. 

 

I have read loads on Google and it just confuses me even more. 

 

I have read that I need to change the async to something like this: 

 

public static async System.Threading.Tasks.Task AwaitConfirmation(CancellationToken token)

 

But when I do that, the code I use to call doesn't work as it is expecting me to pass something. 

 

Is a clever person who knows what they are doing able to advise me in a simple way how to do this? 

Thank you in advance. 

Link to comment
Share on other sites

OK - I have managed to solve this in a roundabout way

(Probably not a good way, but it works)
 

        public static async System.Threading.Tasks.Task AwaitConfirmation()
        {
            try
            {
                Command_Debug("AwaitConfirmation Task started");
                int SecsToWait = 10; // Wait 10 seconds
                int i = 0;
                AwaitingInput = true;
                while (AwaitingInput == true)
                {
                    if (i == SecsToWait*2) // Wait 10 seconds 
                    {
                        AwaitingInput = false;
                    } else
                    {
                        await System.Threading.Tasks.Task.Delay(500);
                        i++;
                    }
                }
                Command_Debug("AwaitConfirmation Task completed"); 
            }
            catch (Exception e)
            {
                ErrorLogger(e, "AwaitConfirmation", "Error waiting for confirmation");
            }
        } 

 

By looping every 500ms for the specified amount of time (10 secs) it checks a flag and if false, exits the loop ending the wait for the keypress

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.