View server.cs
#!/usr/bin/env dotnet run | |
var builder = WebApplication.CreateBuilder(args); | |
var config = builder.Configuration; | |
var connString = config["connectionString"] ?? "Data Source=todos.db"; | |
builder.AddDbContext<TodoDb>(options => options.UseSqlite(connString)); | |
builder.AddSqlite<Todo>(connString) // Higher level API perhaps? | |
var app = builder.Build(); |
View ConcurrentDictionaryExtensions.cs
using System; | |
using System.Threading.Tasks; | |
namespace System.Collections.Concurrent | |
{ | |
public static class ConcurrentDictionaryExtensions | |
{ | |
/// <summary> | |
/// Provides an alternative to <see cref="ConcurrentDictionary{TKey, TValue}.GetOrAdd(TKey, Func{TKey, TValue})"/> that disposes values that implement <see cref="IDisposable"/>. | |
/// </summary> |
View Solution.cs
var t1 = DoFooAsync(obj); | |
var t2 = DoBarAsync(obj); | |
var t = await WhenAnySuccessOrAllFail(t1, t2); | |
async Task WhenAnySuccessOrAllFail(params Task[] tasks) | |
{ | |
var remaining = new List<Task>(tasks); | |
while (remaining.Count > 0) |
View trie.js
const routes = ['/foo/blah/bar', '/foo', '/products'] | |
function buildTrie(routes) { | |
var root = { path: {} }; | |
for (var route of routes) { | |
var node = root; | |
for (var segment of route.split('/')) { | |
if(segment.length === 0) continue; | |
if (node.path[segment] == null) { | |
node.path[segment] = { path: {} }; |
View LazyControllers.cs
using System; | |
using System.Collections.Generic; | |
using System.Collections.Immutable; | |
using System.IO; | |
using System.Linq; | |
using System.Reflection; | |
using System.Runtime.Loader; | |
using System.Threading; | |
using Microsoft.AspNetCore.Builder; | |
using Microsoft.AspNetCore.Hosting; |
View DynamicController.cs
using System; | |
using System.Collections.Generic; | |
using System.Reflection; | |
using System.Threading; | |
using System.Threading.Tasks; | |
using Microsoft.AspNetCore.Builder; | |
using Microsoft.AspNetCore.Hosting; | |
using Microsoft.AspNetCore.Mvc; | |
using Microsoft.AspNetCore.Mvc.ApplicationParts; | |
using Microsoft.AspNetCore.Mvc.Infrastructure; |
View Deadlock.cs
using System; | |
using System.Threading; | |
using System.Threading.Tasks; | |
using Microsoft.Extensions.DependencyInjection; | |
namespace ConsoleApp38 | |
{ | |
class Program | |
{ | |
[ThreadStatic] |
View linker.xml
<?xml version="1.0" encoding="utf-8"?> | |
<!-- See: https://github.com/mono/linker/blob/master/src/linker/README.md#syntax-of-xml-descriptor --> | |
<linker> | |
<assembly fullname="Microsoft.Extensions.Hosting"> | |
<type fullname="Microsoft.Extensions.Hosting.Internal.ApplicationLifetime" /> | |
<type fullname="Microsoft.Extensions.Hosting.Internal.ConsoleLifetime" /> | |
<type fullname="Microsoft.Extensions.Hosting.ConsoleLifetimeOptions" /> | |
<type fullname="Microsoft.Extensions.Hosting.Internal.Host" /> | |
<type fullname="Microsoft.Extensions.Hosting.HostOptions" /> | |
</assembly> |
View lookbrad.cs
using System; | |
using System.Collections.Concurrent; | |
using System.Threading; | |
using System.Threading.Tasks; | |
namespace ConsoleApp25 | |
{ | |
class Program | |
{ | |
static async Task Main(string[] args) |
View oidc.cs
services.AddOptions<OpenIdConnectOptions>() | |
.Configure<IOIDCPipelineStore, IHttpContextAccessor>((oidcPipelineStore, accessor, options) => | |
{ | |
options.ProtocolValidator = new MyOpenIdConnectProtocolValidator(oidcPipelineStore, accessor) | |
{ | |
RequireTimeStampInNonce = false, | |
RequireStateValidation = false, | |
RequireNonce = true, | |
NonceLifetime = TimeSpan.FromMinutes(15) | |
}; |
NewerOlder