Web 呼び出しをサポートするカスタム フォーマッタを使用していますが、バグ レポートで問題が明らかになりました。私はそのようにメソッドをオーバーライドしていました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();
});
}
- これは大きな懸念事項ですか?
- これを行うためのより良い(より多くの「ベストプラクティス」)方法はありますか?