2016-08-09 64 views
1

Sind Streams in NancyFx bei Verwendung von StreamResponse()?NancyFx: Sind Streams bei der Verwendung von StreamResponse() entfernt?

Mit einem StreamWriter, um in den Stream zu schreiben, kann ich es nicht entsorgen, ohne den Stream zu schließen, den ich senden möchte. Und so wie ich es sehe, kann ich den Stream auch nicht manuell entsorgen, da ich die Methode bei der Rückgabe tatsächlich verlassen habe.

Dieser Code funktioniert:

// Open a stream and write to it with streamReader 
Stream memStream = new MemoryStream(); 
StreamWriter memWriter = new StreamWriter(memStream, Encoding.UTF8); 
memWriter.Write(someStringText); 
memWriter.Flush(); 
memStream.Position = 0; 

// Add stream to the respose which should get downloaded 
var response = new StreamResponse(() => memStream, MimeTypes.GetMimeType(contentType)); 
return response.AsAttachment(someFileName); 

Muss ich über den Strom bis zum Kollektor Müll Verweilen auf Sorgen machen müssen zusammen kommt oder es noch richtig von der StreamResponse entsorgt werden?

+0

Wenn diese Klasse IDisposable implementiert, dann entsorgen Sie sie, wenn Sie damit fertig sind. –

Antwort

1

Gemäß StreamResponse.cs, StreamResponse.Dispose() entsorgt der von der Func<Stream> zurückgegebene Strom.

Für die Entsorgung von StreamWriter ohne Auswirkungen auf den zugrunde liegenden Stream, siehe this answer.

+0

Und der StreamWriter kann vom Garbage Collector sicher verwaltet werden? Ich sehe keinen Weg damit umzugehen, ohne den Stream zu schließen. – Bingla

+0

@Bingla Siehe meine Bearbeitung. –

+0

Wann wird StreamResponse.Dispose() aufgerufen? Wird das von Nancy gehandhabt, oder müssen wir es explizit nennen? – Mac