C# Blazor aync方法不适用于';不能完全执行

C# Blazor aync方法不适用于';不能完全执行,c#,html,css,blazor,C#,Html,Css,Blazor,做一件事,我就卡住了。我的代码没有完全通过。我相信等待、异步的东西存在问题 我的问题是:在@foreach方法中,我调用了一个方法“loadEach”,并检查当前订单行是否必须为橙色。但问题是,在LADADACH方法中间(WorksAPI调用之后),立即用另一个命令再次调用它。ID值和LoADAH方法从未完全通过。我能做什么,blazor会等到loadEach方法完全完成后再去构建表 @foreach (var order in sortedOrders)

做一件事,我就卡住了。我的代码没有完全通过。我相信等待、异步的东西存在问题

我的问题是:在@foreach方法中,我调用了一个方法“loadEach”,并检查当前订单行是否必须为橙色。但问题是,在LADADACH方法中间(WorksAPI调用之后),立即用另一个命令再次调用它。ID值和LoADAH方法从未完全通过。我能做什么,blazor会等到loadEach方法完全完成后再去构建表

                @foreach (var order in sortedOrders)
                {
                    loadEach(order.Id).ConfigureAwait(true);

                    <tr style="background-color:@(hasPausedOperation == true ? "#ebc14d" : "")" @onclick="@(() => Selected(order.Id))">
                        @*<td @onclick="@(() => Selected(order.Id))">@order.WorkCenterValue</td>*@
                        <td>@order.OrderNumber</td>
                        <td>@order.Customer</td>
                        <td>@order.ExpectedStartDateTime?.ToString("yyyy-MM-dd")</td>
                        <td>@order.EndDateTime?.ToString("yyyy-MM-dd")</td>
                        <td>@order.ExternalWorker</td>
                        @*<td @onclick="@(() => Selected(order.Id))">@order.Priority</td>*@
                    </tr>
                    @if (orderId != null && orderId == order.Id)
                    {
                        <tr>
                            <td colspan="5">
                                <Logging orderId="order.Id" workCenter="workCenter"></Logging>
                            </td>
                        </tr>
                    }

                    hasPausedOperation = false;
                }
@foreach(分拣机中的var订单)
{
loadEach(order.Id).ConfigureAwait(true);
@*@order.WorkCenterValue*@
@订单号
@订单,顾客
@订单.ExpectedStartDateTime?.ToString(“yyyy-MM-dd”)
@order.EndDateTime?.ToString(“yyyy-MM-dd”)
@order.ExternalWorker
@*@顺序,优先权*@
@if(orderId!=null&&orderId==order.Id)
{
}
haspausedooperation=false;
}
受保护的异步任务loadEach(int-orderId)
{
如果(订单ID!=0)
{
works=wait Http.GetFromJsonAsync($“works?orderId={orderId}”);
foreach(var工作中的工作。工作)
{
if((work.EndDateTime==null&&work.StartDateTime!=null&&canStart&&work.workogeneddatetime!=null))
{
haspausedooperation=true;
}
}
}
}

您似乎需要每行的信息

最有效的解决方案是让服务器解决这个问题,这样总的执行时间会低得多。HasPauseOperation可以是WorkItem Dto/ViewModel的属性

如果您确实希望这样延迟,那么将信息存储在共享变量中并不是最好的方法。Blazor在razor部分不支持异步代码

因此,选择a:

 var hasPausedOperation = loadEach(order.Id); // no await
但这需要一个
booloadeach(intorderid)
,没有异步,没有任务。您必须在HttpClient调用时调用.Result

更好的选项b是为行创建组件:

@foreach (var order in sortedOrders)
{
   <OrderRow Order="@order" />
}
@foreach(分拣机中的var订单)
{
}
OrderRow
组件中,您有一个async OnInitializedAsync(),可以在其中正确处理此问题


您可以为

创建一个组件,这两个代码片段之间有什么区别吗?解释一下或者删除一个。我在页面的最后贴出了整个loadeach方法。或者我需要发布更多我不知道的东西?我现在修复了帖子。也许现在更干净了
@foreach (var order in sortedOrders)
{
   <OrderRow Order="@order" />
}