我正在制作一个课程安排/家庭作业页面。我的页面上有几个课程,每个课程都有几个课时。对于通过提供对“SingleClassPeriod”组件的引用来显示的每个时期,我可以从列表中添加书籍。我的问题:鉴于我没有更改作为参数提供给每个“SingleClasssPeriod”对象的reference,是否可以编辑实例的contents,例如填充书籍、人员和内容的列表等等?
为了避免并发/异步延迟问题,我使用一个事件来通知父级我已完成编辑(即它现在可以通过数据层安全地保存页面信息)。
SingleClass.razor
@foreach (var period in Class.Periods)
{
<SingleClassPeriod Period=period />
}
单节课
<button @onclick="()=> Period.Books.Add(new Book())" />
<button @onclick="()=> OnFinishedEditing.InvokeAsync()" />
@code {
[Parameter]
public ClassPeriod Period { get; set; }
[Parameter]
public EventCallback OnFinishedEditing {get; set;}
}
更改参数本身的状态没有任何问题。由您的算法和期望来决定是否应该发生更改以及如果应该发生,何时发生。如果您担心多个源尝试同时读取/写入相同的资源,那么您可以实现类似信号量的模式和要在资源上执行的操作队列。
因此,如果您的资源正在编辑,那么所有后续操作都将在队列中等待,直到编辑完成。而且,如果您的资源正在被读取,那么所有写入都将在队列中等待,直到所有读取完成(您可以允许多个实体同时读取同一资源)。