Как обрабатывать ожидающий Task возврат нулевого случая в С#C#

Место общения программистов C#
Ответить
Anonymous
 Как обрабатывать ожидающий Task возврат нулевого случая в С#

Сообщение Anonymous »

Я столкнулся с одной проблемой при обработке случая, когда await Task возвращает значение null.
В коде ниже, если метод GetByName() возвращает значение null. Тогда в моем графическом интерфейсе кода вызова появится исключение ниже. Я думаю, это потому, что GetByName() возвращает значение null, и я вызываю его с помощью await.
Могу ли я узнать, есть ли лучший способ справиться с таким случаем? Моя цель - просто сделать что-то, когда return не равен нулю, и сделать что-то другое, если return равно нулю. И то, и другое имеет смысл с точки зрения логики.
blazor.webview.js:1 One or more errors occurred
(Status(StatusCode="Cancelled", Detail="No message returned from method."))
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at DataView2.Pages.Dataset.ImportDataset.PickFileFath()
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
at MudBlazor.MudBaseButton.OnClickHandler(MouseEventArgs ev)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

public async Task GetByName(string datasetName)
{
try
{
var entities = await _repository.GetAllAsync();
var returnValue = entities.FirstOrDefault(e => e.Name == datasetName);
if (returnValue == null)
return await Task.FromResult(null); // here I mean return null
else
return returnValue;
}
catch (Exception ex)
{
// Log the exception
Console.WriteLine($"Error: {ex.Message}");

// Optionally, throw a gRPC-specific error to return a meaningful message
throw new RpcException(new Status(StatusCode.Internal, "An error occurred while retrieving the database."));
}
}

// Below is the code to invoke GetByName method
var curDbService = await appEngine.DatabaseRegistryService.GetByName(result.FileName);
if (curDbService != null)
{
// Do something here
}
else
{
// Do others
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... in-c-sharp
Ответить

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

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

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

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

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