.GetAwaiter().GetResult()
если вам нужно получить результат синхронно..ConfigureAwait(false)
в своём асинхронном вызове, это значит, что CLR будет ждать освобождения вызывающего потока, чтобы продолжить выполнять код после await. Однако вызывающий поток уже бесконечно занят ожиданием завершения вашего асинхронного метода там, где вы получаете Result - вот вам и типичный deadlock..ConfigureAwait(false)
к вашему асинхронному вызову (это приведет к необходимости выполнять дальнейшие изменения в UI через диспетчер, Dispatcher.Invoke
в WPF), либо запустить свой код в контексте синхронизации, отличном от того, который используется в UI - самый простой способ это вообще не использовать контекст - выполнить свой код внутри Task.Run:Task.Run(async() => html = await browser.GetSourceAsync());
private async Task<string> GetHTMLFromWebBrowser()
{
return await browser.GetSourceAsync();
}
....
Task.Run(async() => html = await GetHTMLFromWebBrowser());
Array.from(str, n => n < 5 ? 0 : 1).join('')
// или
[...str].reduce((acc, n) => acc + +(n >= 5), '')
// или
''.concat(...str.split('').map(n => Math.floor(n / 5)))
// или
[].map.call(str, n => -~-~-~n >> 3).join``
// или
str.replace(/./g, m => Number('56789'.includes(m)))
// или
str.replace(/[1-4]/g, 0).replace(/[5-9]/g, 1)
this->
, если есть конфликт имен. url.match(/.+\//)[0]
// или
url.replace(/[^\/]+$/, '')
// или
url.slice(0, url.lastIndexOf('/') + 1)
// или
url.split(/(?<=\/)/).slice(0, -1).join('')
// или
[...url].reduceRight((acc, n) => (acc || n === '/') ? n + acc : acc, '')
const where = '.list';
const what = '.content';
const $targets = $(where).children();
$(what).each((i, n) => $targets.eq(i).append(n));
const targets = document.querySelector(where).children;
document.querySelectorAll(what).forEach((n, i) => targets[i]?.append(n));
str.slice(1, -1).split(', ')
// или
JSON.parse(str.replace(/[а-яё]+/g, '"$&"'))
// или
str.match(/[^\s\[\],]+/g) ?? []
coord.split(', ').map(Number)
// или
coord.match(/[\d.]+/g).map(n => +n)
// или
eval(`[${coord}]`)
// или
JSON.parse('['.concat(coord, ']'))
// или
Array.from(coord.matchAll(/[^, ]+/g), parseFloat)
public class Book
{
public string Name { get; set; }
public string Author { get; set; }
}
public class Library
{
private List<Book> books;
public Library()
{
books = new List<Book>();
}
public IEnumerable<Book> GetAllBooks {
get
{
return books;
}
}
public void AddBook(Book b)
{
books.Add(b);
}
}
class Program
{
static void Main(string[] args)
{
var library = new Library();
library.AddBook(new Book { Author = "Пушкин", Name = "Руслан и Людмила" });
library.AddBook(new Book { Author = "Булгаков", Name = "Мастер и Маргарита" });
foreach(var book in library.GetAllBooks)
{
Console.WriteLine($"{book.Author} {book.Name}");
}
Console.ReadLine();
}
}