Лучшие практики для асинхронных вызовов в MVP с WinForms

Я не на 100% уверен, что это то, что вы хотите сделать, но я считаю, что это:

list1 = ['  I am Sam', 'It is 1,2,3  ', ' It is hot right now' ]

match1 = 'I am'
match2 = 'is 1,2'
match3 = 'hot right now'


def check(the_list, *match):
    return all(any(w in p for p in the_list) for w in match)))

print(check(list1, match1, match2, match3))

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

8
задан George Mauer 18 December 2009 в 19:41
поделиться

2 ответа

Могу только утверждать, что я думал об этом (до прочтения вашего вопроса;). Сначала я бы установил места, где это действительно важно; например, точка доступа к БД. Если есть место, которое не должно выполняться в контексте «UI» (вы можете сохранить его из http://msdn.microsoft.com/en-us/library/system.threading.synchronizationcontext.current.aspx в потоке пользовательского интерфейса, а затем сравните позже с контекстом синхронизации без пользовательского интерфейса), затем Debug.BitchAndMoan () об этом. Любые более длительные вычисления (которые «должны» быть четко разделены в их собственных коллекторах, верно;) должны утверждать это.

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

Отмена задачи на самом деле является проблемой докладчика, но у вас должен быть ссылочный объект, который сообщает, что вы хотите остановить. Если вы выберете прокси-путь, вы можете подобрать созданные потоки в список задач с помощью IAsyncResult, но по-прежнему проблема решить, какой из них должен быть отменен, если одно и то же действие разрешено вызывать несколько раз параллельно. Таким образом, вы должны предоставить задаче подходящее имя для конкретного вызова при ее запуске; что подразумевает слишком много логики на стороне View -> Presenter, вероятно, должен попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

но у вас должен быть ссылочный объект, который сообщает, что вы хотите остановить. Если вы выберете прокси-путь, вы можете подобрать созданные потоки в список задач с помощью IAsyncResult, но по-прежнему проблема решить, какой из них должен быть отменен, если одно и то же действие разрешено вызывать несколько раз параллельно. Таким образом, вы должны предоставить задаче подходящее имя для конкретного вызова при ее запуске; что подразумевает слишком много логики на стороне View -> Presenter, вероятно, должен попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

но у вас должен быть ссылочный объект, который сообщает, что вы хотите остановить. Если вы выберете прокси-путь, вы можете подобрать созданные потоки в список задач с помощью IAsyncResult, но по-прежнему проблема решить, какой из них должен быть отменен, если одно и то же действие разрешено вызывать несколько раз параллельно. Таким образом, вы должны предоставить задаче подходящее имя для конкретного вызова при ее запуске; что подразумевает слишком много логики на стороне View -> Presenter, вероятно, должен попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

Если вы выберете прокси-путь, вы можете подобрать созданные потоки в список задач с помощью IAsyncResult, но по-прежнему проблема решить, какой из них должен быть отменен, если одно и то же действие разрешено вызывать несколько раз параллельно. Таким образом, вы должны предоставить задаче подходящее имя для конкретного вызова при ее запуске; что подразумевает слишком много логики на стороне View -> Presenter, вероятно, должен попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

Если вы выберете прокси-путь, вы можете подобрать созданные потоки в список задач с помощью IAsyncResult, но по-прежнему проблема решить, какой из них должен быть отменен, если одно и то же действие разрешено вызывать несколько раз параллельно. Таким образом, вы должны предоставить задаче подходящее имя для конкретного вызова при ее запуске; что подразумевает слишком много логики на стороне View -> Presenter, вероятно, должен попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

но по-прежнему остается проблемой решить, какое из них должно быть отменено, если одно и то же действие может быть вызвано несколько раз параллельно. Таким образом, вы должны предоставить задаче подходящее имя для конкретного вызова при ее запуске; что подразумевает слишком много логики на стороне View -> Presenter, вероятно, должен попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

но по-прежнему остается проблемой решить, какое из них должно быть отменено, если одно и то же действие может быть вызвано несколько раз параллельно. Таким образом, вы должны предоставить задаче подходящее имя для конкретного вызова при ее запуске; что подразумевает слишком много логики на стороне View -> Presenter, вероятно, должен попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

Докладчику, вероятно, следует попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

Докладчику, вероятно, следует попросить View спросить пользователя, от какой из задач следует избавиться.

По моему опыту, это обычно просто обходится с помощью событий (стиль SCSF). Если бы делал это с нуля, я бы пошел путем прокси, так как SCSF был проблемой во многих отношениях, что я сомневаюсь в здравом уме его разработчиков.

2
ответ дан 5 December 2019 в 21:21
поделиться

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

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

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