Код: Выделить всё
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..
}
}
< /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