From 3c43f21afa9193860ecc1978d8e33091cf52aac4 Mon Sep 17 00:00:00 2001 From: duzx24 Date: Mon, 8 Sep 2025 00:14:46 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework.cs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/homework.cs b/homework.cs index 91a7fc0..009d8b6 100644 --- a/homework.cs +++ b/homework.cs @@ -32,6 +32,25 @@ public async Task UpdateInventoryAsync(string title, int quantity) // TODO: 使用 lock 语句保证线程安全 // 提示:在 lock 块中查找书籍并更新库存,若库存不足则输出提示 + lock (_lock) + { + var book = _books.Find(b => b.Title == title); + if(book == null) + { + Console.WriteLine($"错误:未找到《{title}》"); + return; + } + + if(book.Inventory >= quantity) + { + book.Inventory -= quantity; + Console.WriteLine($"购买 {quantity} 本《{title}》成功!仓库剩余 {book.Inventory} 本。"); + } + else + { + Console.WriteLine($"购买 {quantity} 本《{title}》失败!仓库剩余 {book.Inventory} 本。"); + } + } } } @@ -42,6 +61,9 @@ public class BookStore // TODO: 实现异步购书方法CheckoutAsync,调用 UpdateInventoryAsync public async Task CheckoutAsync(string bookTitle, int quantity) { + Console.WriteLine($"用户开始购买《{bookTitle}》{quantity}本"); + await _db.UpdateInventoryAsync(bookTitle, quantity); + Console.WriteLine($"用户购买《{bookTitle}》{quantity}本的操作已完成"); } public async Task SimulateMultipleUsers() @@ -59,9 +81,15 @@ public async Task SimulateMultipleUsers() // 提示:创建多个 Task 调用 CheckoutAsync,并传入不同书名和数量 var tasks = new List { - + CheckoutAsync("C#入门",3), + CheckoutAsync("异步编程",3), + CheckoutAsync("异步编程",1), + CheckoutAsync("C#入门",6), + CheckoutAsync("异步编程",4), + CheckoutAsync("C#入门",4) }; + await Task.WhenAll(tasks); Console.WriteLine("\n购买后库存:"); books = await _db.GetBooksAsync(); From b335f40454c8e4d0ae6370dc450727331e8ef46b Mon Sep 17 00:00:00 2001 From: duzx24 Date: Mon, 8 Sep 2025 00:22:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/homework.cs b/homework.cs index 009d8b6..30c3768 100644 --- a/homework.cs +++ b/homework.cs @@ -81,12 +81,11 @@ public async Task SimulateMultipleUsers() // 提示:创建多个 Task 调用 CheckoutAsync,并传入不同书名和数量 var tasks = new List { + CheckoutAsync("C#入门",2), CheckoutAsync("C#入门",3), - CheckoutAsync("异步编程",3), CheckoutAsync("异步编程",1), - CheckoutAsync("C#入门",6), - CheckoutAsync("异步编程",4), - CheckoutAsync("C#入门",4) + CheckoutAsync("异步编程",2), + CheckoutAsync("异步编程",3) }; await Task.WhenAll(tasks);