1: Как я могу использовать здесь async / await вместо Future.then ()? Какое самое элегантное решение?
blockquote>асинхронные методы заразительны. Это означает, что ваш метод ItemsRepository должен быть асинхронным, чтобы использовать await внутри. Это также означает, что вы должны вызывать его асинхронно из других мест. Смотрите пример:
Future
ItemsRepository() async { // #1 myString = await rootBundle.loadString('assets/data/item_int2string.json'); // do something with my string here, which is not in a Future anymore... } Обратите внимание, что использование .then - это то же самое, что и ожидание в асинхронной функции. Это просто синтаксический сахар. Обратите внимание, что вы будете использовать .then иначе, чем в вашем примере:
ItemsRepository() { // #1 rootBundle.loadString('assets/data/item_int2string.json').then((String myString) { // do something with myString here, which is not in a Future anymore... }); }
И для # 2 не беспокойтесь о влиянии асинхронного кода на производительность. Код будет выполняться с той же скоростью, что и синхронный код, чуть позже, когда произойдет обратный вызов. Единственная причина, по которой существует асинхронность, заключается в простом способе продолжения работы кода, пока система ожидает возврата асинхронно вызываемой части. Например, не блокируйте пользовательский интерфейс, ожидая, пока диск загрузит файл.
Я рекомендую вам прочитать основные документы об асинхронности в Dart .
Обычно, через заголовок довольного расположения - т.е.
Content-Disposition: inline; filename=foo.pdf
Поэтому просто используйте Заголовки. Добавьте, или AddHeader, или независимо от того, что это, с:
ответ. Заголовки. Добавьте ("Довольное Расположение", "встройте; filename=foo.pdf");
(встроенный "шоу в браузере", вложение, "сохраняют как файл"),
System.IO.MemoryStream stream = new System.IO.MemoryStream();
stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
this.Response.Clear();
this.Response.Buffer = true;
this.Response.ContentType = "application/pdf";
this.Response.AddHeader("Content-Disposition", "attachment; filename=\""+FILENAME+"\"");
this.Response.BinaryWrite(stream.ToArray());
this.Response.End();