private static void ExecFunc(MyFunc item) { try { item.Result = item.Func(); item.Done = true; } catch (Exception e) { item.Exception = e; item.Done = true; } try { item.Reset.Set(); } catch (ObjectDisposedException) { // ignored } }