I am practicing with using Tasks and I put something together but am unsure if I used it properly.  I read through Stephen Cleary's blog and it seems that it is okay but at the same time I do some things that seem like there is a better way.  So what my program does is it has a start button and a stop button. When you press the start button it will start doing recurring requests to a webservice. At that time the start button is disabled and the stop button is enabled. When the requests finish up, I want the start button to be re-enabled and the stop button to become disabled. This is what I have in my Form:private async void btnSend_Click(object sender, EventArgs e){      ...      ...      ...            btnSend.Enabled = false;            btnStop.Enabled = true;            cts = new CancellationTokenSource();            try            {                // wait for the task to finish before continuing to enable the buttons                 task t = requestThread.Execute(cts.Token);                await t;            }            catch (Exception eRun)            {                MessageBox.Show(eRun.Message, Application Error);            }            finally            {                cts.Dispose();            }            // re-enable btnSend            btnSend.Enabled = true;            btnStop.Enabled = false;And then the Execute method: public async Task Execute(CancelationToken ct)     {        UI.Log(-------------------------------------------------);        UI.Log(Starting Test Execution);        if (Recurring)        {            for (int i = 1; i <= NumberOfRequests; i++)            {                if (ct.IsCancellationRequested)                    return;                UI.Log(string.Format(Attempting {0} of {1}, i, numberOfRequests));                await SendRequest(ct);                if (NumberOfRequests > 1 && i != numberOfRequests)                {                    try                    {                        await Task.Delay(timeInterval * 1000, ct);                    }                    catch (TaskCanceledException e)                    {                        // do nothing it's okay                    }                }            }        }        else        {            await SendRequest(ct);        }        UI.Log(Test Execution Complete);    }I would really appreciate it if someone with some more Task experience can give me some pointers on whether this looks okay or I am breaking etiquette.Edit: I have done some improvements with the help of a discussion from StackOverflow. Particularly, I removed the Task.Run since neither the Execute nor the SendRequest methods are CPU-bound. I changed my request.GetResponse to await request.GetResponseAsync() in SendRequest. This way I'm not wasting a thread from the thread pool for no reason.  
Making recurring requests to a web service using Task.Run
c#;task parallel library