Skip to content

Commit 57c353a

Browse files
committed
Addressed feedback
1 parent cc85c5a commit 57c353a

File tree

11 files changed

+34
-24
lines changed

11 files changed

+34
-24
lines changed

src/Mvc/Mvc.Core/src/Infrastructure/ResourceInvoker.cs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public virtual Task InvokeAsync()
8383
return Awaited(this, task, scope);
8484
}
8585

86-
return ReleaseResourcesCore(scope);
86+
return ReleaseResourcesCore(scope).AsTask();
8787

8888
static async Task Awaited(ResourceInvoker invoker, Task task, IDisposable? scope)
8989
{
@@ -143,27 +143,26 @@ static async Task Logged(ResourceInvoker invoker)
143143
}
144144
}
145145

146-
internal Task ReleaseResourcesCore(IDisposable? scope)
146+
internal ValueTask ReleaseResourcesCore(IDisposable? scope)
147147
{
148148
Exception? releaseException = null;
149149
ValueTask releaseResult = default;
150150
try
151151
{
152152
releaseResult = ReleaseResources();
153+
if (!releaseResult.IsCompletedSuccessfully)
154+
{
155+
return HandleAsyncReleaseErrors(releaseResult, scope);
156+
}
153157
}
154158
catch (Exception exception)
155159
{
156160
releaseException = exception;
157161
}
158162

159-
if (releaseException == null && !releaseResult.IsCompletedSuccessfully)
160-
{
161-
return HandleAsyncReleaseErrors(releaseResult, scope);
162-
}
163-
164163
return HandleReleaseErrors(scope, releaseException);
165164

166-
static async Task HandleAsyncReleaseErrors(ValueTask releaseResult, IDisposable? scope)
165+
static async ValueTask HandleAsyncReleaseErrors(ValueTask releaseResult, IDisposable? scope)
167166
{
168167
Exception? releaseException = null;
169168
try
@@ -178,7 +177,7 @@ static async Task HandleAsyncReleaseErrors(ValueTask releaseResult, IDisposable?
178177
await HandleReleaseErrors(scope, releaseException);
179178
}
180179

181-
static Task HandleReleaseErrors(IDisposable? scope, Exception? releaseException)
180+
static ValueTask HandleReleaseErrors(IDisposable? scope, Exception? releaseException)
182181
{
183182
Exception? scopeException = null;
184183
try
@@ -192,19 +191,19 @@ static Task HandleReleaseErrors(IDisposable? scope, Exception? releaseException)
192191

193192
if (releaseException == null && scopeException == null)
194193
{
195-
return Task.CompletedTask;
194+
return default;
196195
}
197196
else if (releaseException != null && scopeException != null)
198197
{
199-
return Task.FromException(new AggregateException(releaseException, scopeException));
198+
return ValueTask.FromException(new AggregateException(releaseException, scopeException));
200199
}
201200
else if (releaseException != null)
202201
{
203-
return Task.FromException(releaseException);
202+
return ValueTask.FromException(releaseException);
204203
}
205204
else
206205
{
207-
return Task.FromException(scopeException!);
206+
return ValueTask.FromException(scopeException!);
208207
}
209208
}
210209
}

src/Mvc/Mvc.Core/src/Resources.resx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,4 +537,4 @@
537537
<data name="TryUpdateModel_RecordTypeNotSupported" xml:space="preserve">
538538
<value>{0} cannot update a record type model. If a '{1}' must be updated, include it in an object type.</value>
539539
</data>
540-
</root>
540+
</root>

src/Mvc/Mvc.Razor/src/RazorViewEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ private ViewEngineResult CreateViewEngineResult(ViewLocationCacheResult result,
486486
var view = new RazorView(this, _pageActivator, viewStarts, page, _htmlEncoder, _diagnosticListener);
487487
if (view is IAsyncDisposable)
488488
{
489-
throw new InvalidOperationException("Async disposable views are not supported.");
489+
throw new InvalidOperationException(Resources.FormatAsyncDisposableViewsNotSupported(typeof(IAsyncDisposable).FullName));
490490
}
491491

492492
return ViewEngineResult.Found(viewName, view);

src/Mvc/Mvc.Razor/src/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,4 +200,7 @@
200200
<data name="CompiledViewDescriptor_NoData" xml:space="preserve">
201201
<value>At least one of the '{0}' or '{1}' values must be non-null.</value>
202202
</data>
203+
<data name="AsyncDisposableViewsNotSupported" xml:space="preserve">
204+
<value>Views implementing '{0}' are not supported.</value>
205+
</data>
203206
</root>

src/Mvc/Mvc.RazorPages/src/IPageModelActivatorProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public interface IPageModelActivatorProvider
3030
/// </summary>
3131
/// <param name="descriptor">The <see cref="CompiledPageActionDescriptor"/>.</param>
3232
/// <returns>The delegate used to dispose the activated Razor Page model asynchronously.</returns>
33-
Func<PageContext, object,ValueTask> CreateAsyncReleaser(CompiledPageActionDescriptor descriptor)
33+
Func<PageContext, object, ValueTask> CreateAsyncReleaser(CompiledPageActionDescriptor descriptor)
3434
{
3535
var releaser = CreateReleaser(descriptor);
3636
return (context, model) =>

src/Mvc/Mvc.RazorPages/test/Infrastructure/DefaultPageFactoryProviderTest.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public void PageFactorySetsPath()
119119
{
120120
ActionDescriptor = descriptor
121121
};
122-
122+
123123
var viewContext = new ViewContext();
124124

125125
// Act
@@ -404,14 +404,19 @@ private static IPageActivatorProvider CreateActivator()
404404
.Setup(a => a.CreateAsyncReleaser(It.IsAny<CompiledPageActionDescriptor>()))
405405
.Returns((CompiledPageActionDescriptor descriptor) =>
406406
{
407-
return (context, viewContext, instance) => instance switch {
407+
return (context, viewContext, instance) => instance switch
408+
{
408409
IAsyncDisposable asyncDisposable => asyncDisposable.DisposeAsync(),
409410
IDisposable disposable => SyncDispose(disposable),
410411
_ => default
411412
};
412413
});
413414

414-
ValueTask SyncDispose(IDisposable disposable) { disposable.Dispose(); return default; }
415+
ValueTask SyncDispose(IDisposable disposable)
416+
{
417+
disposable.Dispose();
418+
return default;
419+
}
415420

416421
return activator.Object;
417422
}

src/Mvc/Mvc.RazorPages/test/Infrastructure/PageActionInvokerTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,8 +1400,8 @@ public async Task InvokeAction_ForPage_Logs(bool hasPageModel)
14001400
var loggerFactory = new TestLoggerFactory(testSink, enabled: true);
14011401
var logger = loggerFactory.CreateLogger("test");
14021402

1403-
var actionDescriptor = hasPageModel
1404-
? CreateDescriptorForPageModelPage()
1403+
var actionDescriptor = hasPageModel
1404+
? CreateDescriptorForPageModelPage()
14051405
: CreateDescriptorForSimplePage();
14061406
actionDescriptor.ViewEnginePath = "/Pages/Foo";
14071407
actionDescriptor.RouteValues.Add("page", "foo");

src/Mvc/Mvc.ViewFeatures/src/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,4 +298,7 @@
298298
<data name="UnsupportedRenderMode" xml:space="preserve">
299299
<value>Unsupported RenderMode '{0}'.</value>
300300
</data>
301+
<data name="AsyncDisposableViewsNotSupported" xml:space="preserve">
302+
<value>Views implementing '{0}' are not supported.</value>
303+
</data>
301304
</root>

src/Mvc/Mvc.ViewFeatures/src/ViewComponents/DefaultViewComponentInvoker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private IViewComponentResult InvokeSyncCore(ObjectMethodExecutor executor, objec
176176
var stopwatch = ValueStopwatch.StartNew();
177177
object? result;
178178

179-
result = executor.Execute(component, arguments);
179+
result = executor.Execute(component, arguments);
180180

181181
var viewComponentResult = CoerceToViewComponentResult(result);
182182
_logger.ViewComponentExecuted(context, stopwatch.GetElapsedTime(), viewComponentResult);

src/Mvc/Mvc.ViewFeatures/src/ViewEngines/CompositeViewEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public ViewEngineResult FindView(ActionContext context, string viewName, bool is
5555
{
5656
if (result.View is IAsyncDisposable)
5757
{
58-
throw new InvalidOperationException("Async disposable views are not supported.");
58+
throw new InvalidOperationException(Resources.FormatAsyncDisposableViewsNotSupported(typeof(IAsyncDisposable).FullName));
5959
}
6060
return result;
6161
}

src/Mvc/test/Mvc.FunctionalTests/PageAsyncDisposalTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System.Linq;

0 commit comments

Comments
 (0)