PowerShell / PowerShell/PowerShell
Feature Request Async callbacks C# interaction
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C#
- Sterne
- 55.5k
- Forks
- 8.5k
- Ø Merge
- 1 T. 2 Std.
- Gemergte PRs (30 T.)
- 88
Beschreibung
Summary of the new feature/enhancement
As a user I want to provide a pure script blocks to C# AsyncCallback functions so that the functions can be called via PowerShell calls. Currently PowerShell crashes because it tries to invoke the Delegate without a runspace.
Proposed technical implementation details (optional)
When casting a script block to a System.AsyncCallback add code to initialize the runspace automatically.
$http = [System.Net.HttpListener]::new()
$http.Prefixes.Add("http://127.0.0.1:9999/")
$http.Start()
[Console]::WriteLine("Listening...")
$callback = [System.AsyncCallback]{param($asyncResult); [System.Net.HttpListener]$listener = [System.Net.HttpListener] $asyncResult.AsyncState; [System.Net.HttpListenerContext]$context = $listener.EndGetContext($asyncResult); [System.Net.HttpListenerRequest]$request = $context.Request; [System.Net.HttpListenerResponse]$response = $context.Response; [string]$responseString = "<HTML><BODY>Hello World!</BODY></HTML>"; [byte[]]$buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString); $response.ContentLength64 = $buffer.Length; [System.IO.Stream]$output = $response.OutputStream; $output.Write($buffer,0,$buffer.Length); $output.Close() }
[System.IAsyncResult]$result = $http.BeginGetContext($callback, $http)
$uri = [System.Uri]::new("http://127.0.0.1:9999/")
Invoke-WebRequest -Uri $uri
This should work as seemingly and with the same "restrictions" as ForEach-Object -Parallel does in regards to runspace handling.
Maybe a new more lightweight handling that only supports pure functions could be considered for both.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das HttpListener- und System.AsyncCallback-Beispiel aus dem Issue zu reproduzieren. Verfolge dann, wie ein Scriptblock zu System.AsyncCallback gecastet wird und wie Runspaces für ForEach-Object -Parallel gehandhabt werden. Vergleiche das erwartete Callback-Verhalten mit dem aktuellen Absturz und berücksichtige die angegebene Einschränkung, dass Callbacks reine Scriptblocks unterstützen sollten. Als erledigt gilt die Aufgabe, wenn das Beispiel ohne manuelle Einrichtung von Runspaces durch PowerShell läuft.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- csharp, shell
- Bereich
- backend, cli
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 25/100