From 80f882baf3f1854e32df3546fc4d4485c2aab68f Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 3 Jun 2020 18:58:04 -0400 Subject: stop rewriting module at first error --- src/SMAPI/Framework/ModLoading/Framework/RecursiveRewriter.cs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/SMAPI/Framework/ModLoading/Framework/RecursiveRewriter.cs b/src/SMAPI/Framework/ModLoading/Framework/RecursiveRewriter.cs index c4e6013e..898d7fad 100644 --- a/src/SMAPI/Framework/ModLoading/Framework/RecursiveRewriter.cs +++ b/src/SMAPI/Framework/ModLoading/Framework/RecursiveRewriter.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading; using Mono.Cecil; using Mono.Cecil.Cil; using Mono.Collections.Generic; @@ -59,6 +60,7 @@ namespace StardewModdingAPI.Framework.ModLoading.Framework { // rewrite each type in the assembly, tracking whether any type was rewritten (Item1) // and any exception that occurred during rewriting (Item2). + var cancellationToken = new CancellationTokenSource(); Tuple result = this.Module .GetTypes() .Where(type => type.BaseType != null) // skip special types like @@ -66,6 +68,9 @@ namespace StardewModdingAPI.Framework.ModLoading.Framework .WithExecutionMode(ParallelExecutionMode.ForceParallelism) .Select(type => { + if (cancellationToken.IsCancellationRequested) + return Tuple.Create(false, null as Exception); + bool anyRewritten = false; try { @@ -118,6 +123,7 @@ namespace StardewModdingAPI.Framework.ModLoading.Framework } catch (Exception e) { + cancellationToken.Cancel(); return Tuple.Create(anyRewritten, e); } }) -- cgit