Могу ли я избежать дублированного кода в аналогичных методах для синхронных и асинхровых лямбдов?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я избежать дублированного кода в аналогичных методах для синхронных и асинхровых лямбдов?

Сообщение Anonymous »

У меня есть вспомогательный метод, который требует Lambda, чтобы выполнить в блоке Try/Catch/nyance, например,

Код: Выделить всё

public void ProcessSpreadsheet(string filename, Action process) {
try {
// Open MS Excel workbook
// Open sheet & extract data into valueArray
// ... more boiler plate ...

process(valueArray);
}
catch (FooException e) {
LogFoo(e.Message);
throw;
}
catch (BarException e) {
LogBar(e.Message);
throw;
}
finally {
// Close workbook, release resources, etc..
}
}
Теперь я хотел бы создать асинкерскую версию, которая принимает асинхронную лямбду. Lambda.)process(valueArray);
< /code>
to < /p>
await process(valueArray);
< /code>
И все работает нормально. Но я хотел бы не повторять весь код в Try/Catch/, наконец. Есть ли чистый способ достичь этого без повторного кода?public async Task ProcessSpreadsheetAsync(string filename, Func process) {
var asyncTaskComplete = new ManualResetEvent(false);
ProcessSpreadsheet(filename, async valueArray => {
await process(valueArray);
asyncTaskComplete.Set();
});
await Task.Run(() => asyncTaskComplete.WaitOne());
}
< /code>
Но это грязно, и исключения не обрабатываются. Мне интересно, есть ли другой способ?

Подробнее здесь: https://stackoverflow.com/questions/369 ... nc-lambdas
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как выполнить асинхронный ввод/вывод без доступных асинхровых методов [дублировать]
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как мне избежать дублированного контента в этом случае? [закрыто]
    Anonymous » » в форуме Html
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как мне избежать дублированного контента в этом случае? [закрыто]
    Anonymous » » в форуме Html
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Wavesurfer.js и audio.play () оба запуска воспроизведения - как избежать дублированного звука и много волн?
    Anonymous » » в форуме Html
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Spring JMS и ActiveMQ Artemis: управление таймаутом для синхронных сообщений
    Гость » » в форуме JAVA
    0 Ответы
    54 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»