Запуск асинхронного метода как поток или задачаC#

Место общения программистов C#
Ответить
Anonymous
 Запуск асинхронного метода как поток или задача

Сообщение Anonymous »

Я новичок в C#s await/async и сейчас немного играю.

В моем сценарии у меня есть простой клиентский объект, имеющий свойство WebRequest. Клиент должен периодически отправлять живые сообщения через RequestStream WebRequest.
Это конструктор объекта-клиента:

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

IsRunning = true;

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


и асинхронный метод активного отправителя

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++;
}
}


Как следует запускать метод?


new Thread(SendAliveMessageAsync). Start();


или


Task.Run(SendAliveMessageAsync); // меняем тип возвращаемого значения на Task


или


ожидайте SendAliveMessageAsync(); // терпит неудачу, поскольку конструктор не является асинхронным


Мой вопрос больше о моем личном понимании await/async, который Думаю, в некоторых моментах я могу ошибаться.

Третий вариант — бросок

The 'await' operator can only be used in a method or lambda marked with the 'async' modifier


Подробнее здесь: https://stackoverflow.com/questions/348 ... or-as-task
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»