Départ méthode async comme Fil ou de la Tâche

Je suis nouveau sur C#s await/async et en train de jouer un peu partout.

Dans mon scénario, j'ai un client simple objet qui a une WebRequest de la propriété. Le client doit envoyer périodiquement vivant, des messages sur le WebRequests RequestStream.
C'est le constructeur du client de l'objet:

public Client()
{
    _webRequest = WebRequest.Create("some url");
    _webRequest.Method = "POST";

    IsRunning = true;

    //--> how to start the 'async' method (see below)
}

et la async vivant-expéditeur méthode

private async void SendAliveMessageAsync()
{
    const string keepAliveMessage = "{\"message\": {\"type\": \"keepalive\"}}";
    var seconds = 0;
    while (IsRunning)
    {
        if (seconds % 10 == 0)
        {
            await new StreamWriter(_webRequest.GetRequestStream()).WriteLineAsync(keepAliveMessage);
        }

        await Task.Delay(1000);
        seconds++;
    }
}

Comment la méthode a commencé?

nouveau Thread(SendAliveMessageAsync).Start();

ou

Tâche.Exécuter(SendAliveMessageAsync); //changer le type de retour à la Tâche

ou

attendent SendAliveMessageAsync(); //échoue puisque le constructeur n'est pas asynchrone

Ma question est plus sur ma compréhension personnelle de await/async qui, j'imagine, trompe peut-être, en certains points.

La troisième option est de lancer

The 'await' operator can only be used in a method or lambda marked with the 'async' modifier
D'abord, vous devez décider si c'est un fire-and-forget méthode ou quelque chose que vous voulez attendre.
C'est en effet un feu et oublier tout simplement de démarrer une Thread qui envoient des messages actif.
Puis await est inutile que vous n'êtes pas vraiment intéressé à attendre qu'il termine. Je voudrais simplement utiliser le fil approche alors. Personnellement, je considère que des tâches de plus petites unités de travail qui doit être exécutée de manière asynchrone.
Vous ne devriez jamais appel new StreamWriter(_webRequest.GetRequestStream()).WriteLineAsync(keepAliveMessage) - attendre ou à raison, comme StreamWriter est IDisposable et doivent être éliminés de manière appropriée une fois utilisé. Cette syntaxe ne permet pas d'appel .Dipose().
Bon et valable. Mais ce n'est pas le code de travail. Le StreamWriter est également initialisée dans le constructeur, mais pour des raisons de simplicité ne figurent pas ici.

OriginalL'auteur KingKerosin | 2016-01-15