DBSaveTask.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Threading.Tasks;
  3. using MongoDB.Driver;
  4. namespace ETModel
  5. {
  6. [ObjectSystem]
  7. public class DbSaveTaskAwakeSystem : AwakeSystem<DBSaveTask, Component, string, TaskCompletionSource<bool>>
  8. {
  9. public override void Awake(DBSaveTask self, Component entity, string collectionName, TaskCompletionSource<bool> tcs)
  10. {
  11. self.Component = entity;
  12. self.CollectionName = collectionName;
  13. self.Tcs = tcs;
  14. }
  15. }
  16. public sealed class DBSaveTask : DBTask
  17. {
  18. public Component Component;
  19. public string CollectionName { get; set; }
  20. public TaskCompletionSource<bool> Tcs;
  21. public override async Task Run()
  22. {
  23. DBComponent dbComponent = Game.Scene.GetComponent<DBComponent>();
  24. try
  25. {
  26. // 执行保存数据库任务
  27. await dbComponent.GetCollection(this.CollectionName).ReplaceOneAsync(s => s.Id == this.Component.Id, this.Component, new UpdateOptions {IsUpsert = true});
  28. this.Tcs.SetResult(true);
  29. }
  30. catch (Exception e)
  31. {
  32. this.Tcs.SetException(new Exception($"保存数据失败! {CollectionName} {Id}", e));
  33. }
  34. }
  35. }
  36. }