public OperationResult <long> ImportFiles(IFormFile file, long entityId) { if (!Semaphore.Wait(TimeSpan.FromSeconds(1))) { var message = $"Previous file import haven't finished yet. Failed to import File '{file.FileName}'"; Log.Logger().Warning(message); return(OperationResult.Error(message).ToEmpty <long>()); } try { var logIdResult = ImportService.CreateLog(file.FileName); if (logIdResult.Success) { var stream = new MemoryStream(); file.CopyTo(stream); stream.Position = 0; Task.Factory.StartNew(() => Import(stream, file.FileName, entityId, logIdResult.Data), CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default) .ContinueWith(t => LogTaskException(t.Exception, file.FileName), TaskContinuationOptions.OnlyOnFaulted) .ContinueWith(t => { Semaphore.Release(1); stream?.Dispose(); }); } return(logIdResult); } catch (Exception e) { var message = $"File '{file.FileName}' import failed. Message: {e.Message}"; Log.Logger().Error(e, message); Semaphore.Release(1); return(OperationResult.Error(e, message).ToEmpty <long>()); } }