【发布时间】:2015-09-28 14:12:40
【问题描述】:
我有一个自定义格式化程序来支持我的网络调用,但是一个错误报告揭示了一个问题。我正在重写 WriteToStreamAsync() 方法:
public override Task WriteToStreamAsync(Type type,
object value,
Stream writeStream,
HttpContent content,
TransportContext transportContext)
{
return Task.Run(() =>
{
if (value == null) return;
using (var sw = new StreamWriter(writeStream))
{
var serialized = _serializer.Serialize(value);
sw.Write(serialized);
}
});
}
根据this post,问题在于using 语句导致流关闭。解决的办法是去掉using语句,使用显式的Flush()调用,但是依赖GC来处理StreamWriter感觉不对。
public override Task WriteToStreamAsync(Type type,
object value,
Stream writeStream,
HttpContent content,
TransportContext transportContext)
{
return Task.Run(() =>
{
if (value == null) return;
var sw = new StreamWriter(writeStream);
var serialized = _serializer.Serialize(value);
sw.Write(serialized);
sw.Flush();
});
}
- 这是一个主要问题吗?
- 有没有更好(更“最佳实践”)的方法?
【问题讨论】:
-
您是在问如何正确关闭
StreamWriter而不关闭其基本流? Click. -
@sinatr,是的,我认为那将是理想的。
-
点击点击(在之前的评论中),希望你可以使用.Net 4.5。
-
@Sinatr,回答你可以得到一些代表!
标签: c# garbage-collection streamwriter disposable