Я работаю над проблемой и пытаюсь понять, что если здесь следует использовать какие-либо асинхронные структуры данных и/или шаблоны. Я копал книгу Стивена Клири о параллелизме в 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#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Понимание шаблонов деконструкции кода Java (JEP 405: шаблоны записей и шаблоны массивов)
Anonymous » » в форуме JAVA - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-