Использование stream.beginwrite для выполнения вызова REST «забей и забудь»? - PullRequest
1 голос
/ 29 июля 2011

Я пытаюсь вызвать службу RESTful, но на самом деле я не хочу даже ждать ответа (200/404/500).

Я знаю, что это может звучать тривиально, но у меня есть уникальный сценарий, который по какой-то причине требует этого. Я сделал свой запрос так:

        using (Stream stream = webRequest.GetRequestStream())
        {
            stream.BeginWrite(postData, 0, postData.Length, null, null);
        }

Кажется, это работает, но кажется, что это неправильно. Это хмурое поведение? Если да, то какой метод предпочтительнее?

Заранее спасибо

1 Ответ

3 голосов
/ 29 июля 2011

См. MSDN:

EndWrite необходимо вызывать один раз для каждого вызова BeginWrite. Это можно сделать либо с помощью того же кода, который называется BeginWrite, либо с помощью обратного вызова, переданного в BeginWrite.

Так что само по себе , нет - это может привести к утечке. Кроме того, однако, если вы начнете запись async и сразу же утилизируете stream, запись почти наверняка будет выполняться в закрытом / удаленном потоке (крайне маловероятно, что второй поток даже получил участвует в этот момент, не говоря уже о завершении записи). Возможно, запустите элемент Task или ThreadPool, который выполняет обычный Write?

ThreadPool.QueueUserWorkItem(delegate {
    using (Stream stream = webRequest.GetRequestStream()) {
        stream.Write(postData, 0, postData.Length);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...