summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI/Framework')
-rw-r--r--src/SMAPI/Framework/ModLoading/Framework/RecursiveRewriter.cs6
1 files changed, 6 insertions, 0 deletions
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<bool, Exception> result = this.Module
.GetTypes()
.Where(type => type.BaseType != null) // skip special types like <Module>
@@ -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);
}
})