我有一个自定义格式化程序来支持我的网络调用,但是一个错误报告揭示了一个问题。我正在覆盖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);
}
});
}
根据这篇文章,问题在于该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();
});
}
- 这是一个主要问题吗?
- 有没有更好(更“最佳实践”)的方式来做到这一点?