4

I am working on Dotnet Core Blazor and getting below error while using EventCallBack to bind the parent grid after delete events. Below the code for using Child component

<tbody>
      @foreach (var employee in Employees)
       {
          <BlazorAppDemo.Pages.Controls.EmployeeList Employee="employee"
                                                           ShowFooter="ShowFooter"
                                                           OnEmployeeSelectionChange="onEmployeeSelectionChanged"
                                                           btnDeleteClick="OnEmployeeDeleted" >

            </BlazorAppDemo.Pages.Controls.EmployeeList>
        }
    </tbody> 

EmployeeList child component is below

<tr>
@*<td>@Employee.EmployeeId</td>*@
<td><input type="checkbox" @onchange="CheckBoxChanged" /></td>
<td>@Employee.Department.DepartmentName</td>
<td>@Employee.FirstName</td>  
<td>@Employee.DateOfBirth.ToShortDateString()</td>
<td><img class="card-img-top img-thumb" style="width:50px;height:50px" src="@Employee.PhotoPath" /></td>
@if (ShowFooter)
{
    <AuthorizeView Roles="Admin" Policy="OldEmployeeBefore2020">
        <Authorized>
            <td>
                <a href="@($"employeedetails/{Employee.EmployeeId}")" class="btn btn-primary m-1">View</a>
                <a href="@($"employeeEdit/{Employee.EmployeeId}")" class="btn btn-primary m-1">Edit</a>
                @*<a href="#" class="btn btn-danger m-1">Delete</a>*@
                <button class="btn btn-danger m-1" @onclick="btnDelete_Click">
                </button>
            </td>
        </Authorized>
    </AuthorizeView> 
}

Delete Button Event :

 [Parameter]
    public EventCallback<int> btnDeleteClick { get; set; }

 protected async Task btnDelete_Click()
    {
        var response = await EmployeeService.Delete(Employee.EmployeeId).ConfigureAwait(false);

        if (string.IsNullOrEmpty(response.ErrorMessage))
        {               
            await btnDeleteClick.InvokeAsync(Employee.EmployeeId);               
            //NavigationManager.NavigateTo("employee");
        }
    }

Parent page has subscribed the delete event:

 protected async Task OnEmployeeDeleted(int id)
    {
        var response = await EmployeeService.GetEmployees().ConfigureAwait(false);
        if (response.Result != null)
        {  
            Employees = response.Result.Result; 
        }
        else
        {
            PageMessage = response.ErrorMessage;
        }
    }
H H
  • 263,252
  • 30
  • 330
  • 514
Arun Singh
  • 525
  • 2
  • 8
  • 20

1 Answers1

2

You should remove the .ConfigureAwait(false) (2x as far as I coud see).

When you use async/await correctly in Blazor you should almost never need it.

When you do use it you are asking for the remainder of the event to be run on a different thread. The wrong thread in most cases.

H H
  • 263,252
  • 30
  • 330
  • 514
  • 1
    Thanks for reply. After removed the .ConfigureAwait(false) it started working now. I configured because i was getting warning everywhere in async call "Consider Calling ConfiguredAwait on the awaited Task". – Arun Singh Jun 09 '20 at 18:30
  • Can you post the text or number of that warning? Because that shouldn't happen. – H H Jun 09 '20 at 18:32
  • Can you post a minimal repo demonstrating your problem? I'd like to experiment so I can see if this is a bug. – Peter Morris Jun 09 '20 at 19:01
  • Wait, i am trying to upload my repo on git. Once it done will let you know. – Arun Singh Jun 10 '20 at 17:30