Я хотел бы реализовать метод одностороннего вызова в C#. Я знаю, что в веб-сервисе мы можем реализовать с использованием атрибута ONE Way. Я прошел через несколько асинхронных вызовов с делегатом. Если у кого-то есть образец кода, который я могу использовать для него.Один способ вызова в C#
ответ
Ну, может быть, самый простой способ эмулировать односторонний вызов - нажать его на пул потоков?
ThreadPool.QueueUserWorkItem(delegate { DoSomeStuff("abc"); });
Хотя выше немного страдает от проблем с исключениями, было бы достаточно легко обернуть:
(редактирование: упс, BORKED обработка исключений фиксированной ...)
public static void OneWay(Action action) {
if (action == null) throw new ArgumentNullException("action");
ThreadPool.QueueUserWorkItem(delegate {
try { action(); }
catch (Exception ex) {
Trace.WriteLine(ex);
}
});
}
...
OneWay(() => DoSomeStuff("abc"));
После ссылки из одного из комментариев появляется сообщение Фила Хаака, которое по сути является техникой, описывающей этот прекрасный ответ, с некоторым фоном и обсуждением огня и забыванием делегатов. Сообщение называется «Асинхронный огонь и забыть с помощью Lamdas». Обмен сообщениями OneWay широко известен как FireAndForget, поэтому этот ответ прав на деньги. Филата sytax немного более кратким, если вы используете C# 3.0. В любом случае, я прочитал статью. http://haacked.com/archive/2009/01/09/asynchronous-fire-and-forget-with-lambdas.aspx – Nathan
Вы можете обернуть асинхронный делегат в вызове метода
public void MyOneWay()
{
//you can replace the anonymous function with any function you define, if you want
var d = delegate(int a) { Console.Write(a);};
d.BeginInvoke();
}
Примечание: Это псевдокод.
MSDN очень специфичен, что BeginInvoke должен быть сопряжен с EndInvoke, за исключением Control. BeginInvoke. –
См. «Важное примечание» здесь: http://msdn.microsoft.com/en-us/library/2e08f6yc.aspx –
@Marc - это то, что вы используете _supposed_, чтобы использовать его, или потому, что за кулисами он может расстроиться? Мне нравятся делегаты с огнем и забытьем ... – cjk
- 1. Способ вызова метода один раз
- 2. Правильный способ вызова объекта singleton в C++
- 3. Способ вызова - Какао/Obj-C
- 4. Стандартный способ вызова `ffsl` в C++?
- 5. Самый строгий способ вызова кода в C#
- 6. Способ вызова метода до и после MyMethod вызова в C#
- 7. Простой способ вызова 'cat' из C++?
- 8. еще один способ реализовать таймер в C#
- 9. Каков наилучший способ для вызова API обратного вызова - C++
- 10. QT/C++ лучший способ вызова метода родителя
- 11. Лучший способ вызова C-функций из python?
- 12. C# лучший способ вызова .ToString() для объекта
- 13. Один лайнер код вызова
- 14. C# - простой способ вызова метода async?
- 15. Способ вызова ошибки
- 16. Уникальный способ вызова метода вызова
- 17. Лучший способ использовать один класс C++ в программе C
- 18. Функция вызова вызова в C++?
- 19. Media Foundation: еще один способ вызова IMFActivate :: ShutdownObject?
- 20. Способ вызова и атомарность
- 21. ФОС обратного вызова чистого TCP дуплекс только один способ нарушенные
- 22. Правильный способ вызова `setTimeout()`
- 23. C++ - Еще один способ использования петель
- 24. C# Группировка номеров еще один способ
- 25. Лучший способ вызова управляемого кода (C#) из неуправляемого C++
- 26. Эффективный способ вызова предыдущей строки в python
- 27. Правильный способ вызова C DLL-метода из C#
- 28. Каков правильный способ вызова суперкласса в Scala?
- 29. Способ вызова в другой файл
- 30. Есть ли более безболезненный способ вызова Win32 с C#?
Можете ли вы быть более конкретным ... Я не уверен, что кто-то узнает, о чем вы говорите. –