Метод Await Stream WriteAsync блокирует / замораживает
Я пытаюсь потоковое аудио с PushStreamContent и WebApi. Для этого я что-то закодировал. Основной код;
[HttpGet]
public HttpResponseMessage StreamCall(long callId,int playSpeed)
{
var audio = new AudioStreamHelper();
var response = Request.CreateResponse();
response.Content = new PushStreamContent((Action<Stream, HttpContent, TransportContext>) audio.WriteToStream, new MediaTypeHeaderValue("audio/wav"));
return response;
}
AudioStreamHelper code;
public class AudioStreamHelper
{
private readonly string _filename;
protected static readonly ILogger Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.Name);
public AudioStreamHelper()
{
_filename = @"C:/195545.mp3";
}
public async void WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
{
try
{
var buffer = new byte[12365536];
using (var audio = File.Open(_filename, FileMode.Open, FileAccess.Read,FileShare.ReadWrite))
{
var length = (int)audio.Length;
var bytesRead = 1;
while (length > 0 && bytesRead > 0)
{
bytesRead = audio.Read(buffer, 0, Math.Min(length, buffer.Length));
await outputStream.WriteAsync(buffer, 0, bytesRead);
length -= bytesRead;
}
}
}
catch (HttpException ex)
{
Logger.Error(ex.Message);
throw new UserFriendlyException(AppTexts.AudioStreamError);
}
finally
{
outputStream.Close();
}
}
}
Когда я отлаживаю этот код; В AudioStreamHelper класс метода WriteToStream и await outputStream.WriteAsync(buffer, 0, bytesRead);
строка, мой поток блокирует / замораживает и не дает ответа. Я проверяю текущий идентификатор потока. Это то же самое.(В классе Api и Helper) Также этот код работает с другим демонстрационным приложением с System.Net.Http.Formattion(версия 4.0.0.0). Мой проект использует System.Net.Http.Formattion(версия 5.1.0.0). с этим условием? Я не понимаю эту ситуацию.