// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
namespace Microsoft.Teams.Common.Extensions;
public static class ActionExtensions
{
public static Action<T> Debounce<T>(this Action<T> func, int milliseconds = 300)
{
CancellationTokenSource? cancelTokenSource = null;
return arg =>
{
cancelTokenSource?.Cancel();
cancelTokenSource = new CancellationTokenSource();
Task.Delay(milliseconds, cancelTokenSource.Token)
.ContinueWith(t =>
{
if (t.IsCompleted && !t.IsFaulted)
{
func(arg);
}
}, TaskScheduler.Default);
};
}
public static Action Debounce(this Func<Task> func, int milliseconds = 300)
{
CancellationTokenSource? cancelTokenSource = null;
return () =>
{
cancelTokenSource?.Cancel();
cancelTokenSource = new CancellationTokenSource();
Task.Delay(milliseconds, cancelTokenSource.Token)
.ContinueWith(async t =>
{
if (t.IsCompleted && !t.IsFaulted)
{
await func();
}
}, TaskScheduler.Default);
};
}
}microsoft/teams.net
Publicmirrored fromhttps://github.com/microsoft/teams.netAvailable
Libraries/Microsoft.Teams.Common/Extensions/ActionExtensions.cs
47lines · modepreview