使用stream.beginwrite来实现即发即弃的REST调用?

时间:2011-07-29 02:58:16

标签: c# rest asynchronous

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

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

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

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

提前致谢

1 个答案:

答案 0 :(得分:3)

请参阅MSDN:

  

每次调用BeginWrite时都必须调用一次EndWrite。您可以使用调用BeginWrite的相同代码或传递给BeginWrite的回调来执行此操作。

所以本身,不 - 这可能会导致泄密。但是,如果您启动 async 写入并立即处置stream,则写入几乎肯定是关闭/处置的流(特别不太可能第二个线程具有均匀的在那时得到参与,更不用说完成写了)。也许可以开展TaskThreadPool项目来定期Write

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