使用流.实现即发即弃的REST调用

本文关键字:REST 调用 实现 | 更新日期: 2023-09-27 18:04:07

我正在尝试调用RESTful服务,但我甚至不想等待响应(200/404/500)。

我知道这可能听起来微不足道,但是,我有一个独特的场景,出于某种原因需要这样做。我的请求是这样的:

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

这似乎工作,但感觉不对。这是不受欢迎的行为吗?如果有,首选的方法是什么?

Thanks in advance

使用流.实现即发即弃的REST调用

参见MSDN:

EndWrite必须在每次调用BeginWrite时调用一次。你可以使用与BeginWrite相同的代码,也可以通过传递给BeginWrite的回调来实现。

所以本身,不-这可能会导致泄漏。此外,如果您启动异步写入,并立即处置stream,则写入几乎肯定是到已关闭/已处置的流(此时第二个线程甚至不太可能涉及,更不用说完成写入了)。也许启动TaskThreadPool项目来做常规的Write ?

ThreadPool.QueueUserWorkItem(delegate {
    using (Stream stream = webRequest.GetRequestStream()) {
        stream.Write(postData, 0, postData.Length);
    }
});