Я работаю над проблемой и пытаюсь понять, что если здесь следует использовать какие-либо асинхронные структуры данных и/или шаблоны. Я копал книгу Стивена Клири о параллелизме в C#, а также некоторые S.O. сообщения в TaskCompletionSource.
Моя проблема в том, что у меня есть процесс, который отправляет сообщение n другим процессам, каждый из которых возвращает некоторое значение/информацию обратно этому процессу через другое сообщение. Мне нужно собрать эти ответы, преобразовать их в ожидаемую структуру данных, а затем отправить обратно в другой процесс.
Мое предположение о том, как это сделать, похоже на псевдокод ниже. Я подумываю о том, чтобы отправить сообщения процессам, создать новый метод под названием «getFormattedResults...», а затем заставить этот метод по существу контролировать структуру данных, думая о словаре, а затем продолжить, когда все эти сообщения будут готовы. Единственная асинхронная часть этого — гарантировать, что мы получим все сообщения обратно и затем вернемся. На самом деле он не кажется асинхронным, поскольку проверяет это в цикле while. Есть ли лучший подход?
// Maybe this task tracking object is the actual message it gets back?
someThreadSafeDictionary messageRepliesDict
List SomeMethodThatSendMultMessages() {
for process in processes {
messageRepliesDict.add(process.Id, someTaskTrackingObject)
sendMessage(process)
}
// Not sure if this is needed? Thinking this new method could block.
List results = getFormattedResultsFromProcessReplies()
return results
}
void sendMessage(msg) {
// Logic what to do with message
if msg.type == oneImInterestedIn {
addMessageToMessageRepliesDict(msg)
}
}
List getFormattedResultsFromProcessReplies() {
Timeout = 5000
weTimedOut = true
Time = 0
While Time < Timeout {
if Task.WhenAll(messageRepliesDict == Done) {
weTimedOut = false
break
}
}
if weTimedOut {
errorHandling
return
}
List results = collectMessagesFromDictAndFormatThem()
return results
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... cation-res
Каковы хорошие шаблоны для блокировки/ожидания нескольких ответов межпроцессного взаимодействия, их сбора и последующего ⇐ C#
Место общения программистов C#
1722885395
Anonymous
Я работаю над проблемой и пытаюсь понять, что если здесь следует использовать какие-либо асинхронные структуры данных и/или шаблоны. Я копал книгу Стивена Клири о параллелизме в C#, а также некоторые S.O. сообщения в TaskCompletionSource.
Моя проблема в том, что у меня есть процесс, который отправляет сообщение n другим процессам, каждый из которых возвращает некоторое значение/информацию обратно этому процессу через другое сообщение. Мне нужно собрать эти ответы, преобразовать их в ожидаемую структуру данных, а затем отправить обратно в другой процесс.
Мое предположение о том, как это сделать, похоже на псевдокод ниже. Я подумываю о том, чтобы отправить сообщения процессам, создать новый метод под названием «getFormattedResults...», а затем заставить этот метод по существу контролировать структуру данных, думая о словаре, а затем продолжить, когда все эти сообщения будут готовы. Единственная асинхронная часть этого — гарантировать, что мы получим все сообщения обратно и затем вернемся. На самом деле он не кажется асинхронным, поскольку проверяет это в цикле while. Есть ли лучший подход?
// Maybe this task tracking object is the actual message it gets back?
someThreadSafeDictionary messageRepliesDict
List SomeMethodThatSendMultMessages() {
for process in processes {
messageRepliesDict.add(process.Id, someTaskTrackingObject)
sendMessage(process)
}
// Not sure if this is needed? Thinking this new method could block.
List results = getFormattedResultsFromProcessReplies()
return results
}
void sendMessage(msg) {
// Logic what to do with message
if msg.type == oneImInterestedIn {
addMessageToMessageRepliesDict(msg)
}
}
List getFormattedResultsFromProcessReplies() {
Timeout = 5000
weTimedOut = true
Time = 0
While Time < Timeout {
if Task.WhenAll(messageRepliesDict == Done) {
weTimedOut = false
break
}
}
if weTimedOut {
errorHandling
return
}
List results = collectMessagesFromDictAndFormatThem()
return results
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78836058/what-are-good-patterns-to-block-wait-for-multiple-interprocess-communication-res[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия