Я создал внепроцессную фоновую задачу
, в которой я загружаю поток HLS (m3u/m3u8) с помощью библиотеки LibVLCSharp.
Платформа — UWP
У меня есть два разных процесса: приложение и фоновая задача. Приложение — это хост-процесс, в котором я создаю NamedPipeServer. NamedClient создается и подключается в фоновой задаче. Поэтому фоновая задача — это клиентский процесс.
code создания PipeServer
code создания и подключения PipeClient
Я получаю исключение Pipe is broken
в разных местах codeа. Когда PipeServer пытается записать данные в канал, а pipeClient пытается прочитать данные из канала. Когда выдается исключение Pipe is broken
, свойство PipeServer.IsConnected
равно false.
Пример действий, после которых Pipe is broken
Пример codeа, как я могу прочитать данные с помощью PipeClient
Пример codeа, как я могу записать данные с помощью PipeServer
Стек и исключение, которое я получаю
Я не могу воспроизвести проблемы на всех машинах. Я тестировал на Win10 19045.4870 на одной машине, и проблема не воспроизводится, но на другой машине с той же Win10 19045.4870 проблема воспроизводится, так что проблема не зависит от версий Windows.
Task.Run(
async () =>
{
pipeServer = new NamedPipeServerStream(
PipeName,
PipeDirection.InOut,
1,
PipeTransmissionMode.Message,
PipeOptions.Asynchronous);
streamServer = new StreamString(pipeServer);
if (!isClientListening)
{
isClientListening = true;
ListenClient();
}
});
if (!pipeClient?.IsConnected ?? true)
{
pipeClient = new NamedPipeClientStream(
".",
PipeName,
PipeDirection.InOut,
PipeOptions.Asynchronous);
await pipeClient.ConnectAsync();
streamClient = new StreamString(pipeClient);
}
List<RecordTask> tasks = null;
if (pipeClient != null)
{
streamClient ??= new StreamString(pipeClient);
var json = streamClient.ReadString();
tasks = DeserializeJsonToRecordTaskList(json);
}
return tasks;
if (pipeServer != null)
{
if (!pipeServer.IsConnected)
{
await pipeServer.WaitForConnectionAsync();
}
streamServer ??= new StreamString(pipeServer);
var json = JsonConvert.SerializeObject(tasks);
streamServer.WriteString(json);
}
Pipe is broken.
at System.IO.Pipes.NamedPipeServerStream.CheckConnectOperationsServer() + 0x77
at System.IO.Pipes.NamedPipeServerStream.WaitForConnectionCoreAsync(CancellationToken) + 0x1e
at System.IO.Pipes.NamedPipeServerStream.WaitForConnectionAsync(CancellationToken) + 0xc6
at Iptv.Core.RecordProvider.<LoadServerRecordTasks>d__29.MoveNext() + 0x74
Pipe is broken.
at System.IO.Pipes.NamedPipeServerStream.CheckConnectOperationsServer() + 0x77
at System.IO.Pipes.NamedPipeServerStream.WaitForConnectionCoreAsync(CancellationToken) + 0x1e
at System.IO.Pipes.NamedPipeServerStream.WaitForConnectionAsync(CancellationToken) + 0xc6
at Iptv.Core.RecordProvider.<SaveServerRecordTasks>d__20.MoveNext() + 0x9b
в RecordProviderErrors.txt