Синхронизация Асинхронного вызова в c#

Вы можете использовать join вместо слияния.

код SCALA

val newDF = df1
               .join(df2, Seq("source", "destination"), "left_outer")

код PYTHON

newDF = df1
           .join(df2, ['source', 'destination'], 'left_outer')
6
задан Josh Smeaton 16 March 2009 в 23:35
поделиться

6 ответов

Вы могли действительно использовать мониторы, семафоры, или Вы могли даже вращаться, ожидают, пока Ваш асинхронный вызов (вызовы) метода не сделан.

Но можно получить это бесплатно также. Если Вы звоните EndInvoke() на делегате, который был ранее запущен с BeginInvoke(), Вы блокируетесь, пока асинхронная работа не сделана.

Не уверенный, если это помогает, потому что необходимо использовать этот асинхронный шаблон. Если это делает, Вы получаете Асинхронное выполнение (и преобразование от Асинхронной спины до синхронных вызовов) бесплатно.

Выезд Называя Синхронные Методы Асинхронно на MSDN для большего количества информации об этом шаблоне.

Я надеюсь, что это помогает!

7
ответ дан 9 December 2019 в 22:40
поделиться

Это звучит мне как Вы, хотят очередь..., если существует происходящий запрос, добавьте к очереди (с a Monitor); когда вызов завершится, проверьте очередь...

2
ответ дан 9 December 2019 в 22:40
поделиться

IAsyncResult имеет свойство AsyncWaitHandle который дает Вам дескриптор ожидания (если Вы доступны), который будет сообщен, когда операция завершится.

Таким образом можно использовать WaitHandle.WaitAll (или .WaitAny) выполнить невращение ожидает на многих дескрипторах сразу.

2
ответ дан 9 December 2019 в 22:40
поделиться

У Вас есть несколько опций. Вот несколько идей -

Прежде всего Вы могли использовать ManualResetEvent, чтобы "заблокировать" основной поток до Ваших асинхронных операций, которые все завершают. Идея состоит в том, чтобы просто иметь основной вызов потока, Вы функционируете, затем делаете событие. WaitOne (), и функция ответственен за установку события.

С другой стороны, Вы могли попытаться использовать что-то как Семафор. Это разработано для помощи в этих ситуациях, так как можно ограничить его 10 одновременными происшествиями, не волнуясь о попытке обработать его сами. Это, вероятно, было бы моим предпочтительным подходом.

0
ответ дан 9 December 2019 в 22:40
поделиться

Существует две причины использования потоков:

  • использовать в своих интересах ресурсы ЦП, таким образом ускоряя вещи
  • записать несколько одновременных конечных автоматов как простые методы, который делает их более читаемыми

Недостаток использования потоков:

  • это действительно трудно

Если узкое место является 3-минутным ожиданием на удаленной машине, может стоить отметить, что несколько потоков не собираются получать Вас любое преимущество производительности. Вы могли записать целой вещи однопоточный, поддерживающий ряд до десяти объектов "конечного автомата" и перемещения их через этапы пользовательского создания, всех от одного потока, с небольшим различием в по всей производительности.

Таким образом, то, что Вы, возможно, ищете, является хорошим читаемым размещением кода путем превращения пользовательской операции создания в последовательность вызовов, которые читают как отдельный метод (которым они были бы то, если бы Вы выполнили их как поток).

Другой способ добраться, который является с помощью метода итератора, т.е. содержащий yield return операторы, который также дает Вам преимущества удобочитаемости отдельного метода. Я, должно быть, связался с этим три раза на прошлой неделе! Это - статья Jeffrey Richter о AsyncEnumerator.

0
ответ дан 9 December 2019 в 22:40
поделиться

Я немного неясен о том, как Вы используете TransactionScope (таким образом, я могу быть от основы), но можно создать DependentTransactions, который может быть скупо выдан к рабочим потокам. Ваша транзакция верхнего уровня не будет фиксировать, пока все DependentTransactions успешно не фиксировали и наоборот с откатом. Я нашел это как простой способ сделать все или ничего через потоки пока операция, которую Вы вызываете, инкапсулирует функциональность фиксации/отката (IEnlistmentNotification и т.п.).

0
ответ дан 9 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: