public async Task <TResult> Result(TParam arguments) { if (!Done()) { _parameterSelector.Add(arguments); } Thread.MemoryBarrier(); await DelayDone(); var parameters = _parameterSelector.Get(); Thread.MemoryBarrier(); var result = _executor.Get(() => _executing(parameters)); return(result); }